当前位置 : 主页 > 网络编程 > ASP >

重定向后ASP.NET会话丢失,但仅限于IE

来源:互联网 收集:自由互联 发布时间:2021-06-24
斜体字是原始帖子,下面的编辑是非斜体 我使用ASP.NET 4.0在C#中编写. 我通过SQL查找验证用户凭据,如果有效,我将用户名存储在会话变量中,然后将用户重定向回主页面.很简单. if (!db.isVal
斜体字是原始帖子,下面的编辑是非斜体

我使用ASP.NET 4.0在C#中编写.
我通过SQL查找验证用户凭据,如果有效,我将用户名存储在会话变量中,然后将用户重定向回主页面.很简单.

if (!db.isValidLogin(userName, passWord))
    {
        //invalid login, show it!
        //just some code to tell the user invalid credentials
    }
    else
    {
        //show login successful!
        //update some items on the screen
        Session["username"] = userName.ToUpper();
        Response.Redirect("/");
    }

目前还没有通过SSL,因为它是内部开发.
当我使用Chrome版本“25.0.1364.172 m”时,我已正确重定向并且“已登录”.通过向我显示我的用户名并允许我访问身份验证允许的功能,我的屏幕代表了这一点.
当我使用(32位)IE 9版本“9.0.8112.16421”与相同的服务器端代码和过程…当我重定向时,我的会话变量“用户名”消失了.实际上,会话对项目的计数为0.在重定向之前,会话变量已设置且正确.
我在Windows Server 2008 R2 64位盒和Windows 7 64位盒上获得了相同的结果.
我正在使用托管IIS和SQL的单个服务器.我没有使用会话服务器.
我已经找到了…代码运行完全按照需要运行直到重定向.接收凭据,执行我的存储过程以验证…在重定向之前设置会话变量(我可以看到会话和变量以及值是正确的)..然后重定向…并且如上所述,使用Chrome它可以正常工作根据需要…使用IE会话在重定向时丢失.
我也试过这个但没有成功:
    Response.Redirect(“/”,false);
所以我确信IE正在做的事情,可能是在客户端设置cookie,导致浏览器和服务器会话之间不匹配.
我不应该做一个response.redirect ???如果我执行response.redirect,如何防止会话重置?再一次,请记住,当我使用Chrome时,这不会发生.
令人沮丧的…
谢谢你的帮助!

新信息

尝试关闭每个答案的IE缓存…我决定将sessionID输出到浏览器,以便我可以看到它是什么.

登录和重定向的行为更直接……

在IE中,只需使用F5刷新浏览器,就会在服务器上创建新会话.每次刷新我都会收到一个新的会话ID.

使用Chrome进行测试除非我调用session.abandon,超时会话或关闭并重新启动浏览器,否则我不会获得新的会话ID.

当用户点击退出时我只调用session.abandon,但是已经注释掉了代码(以防万一),以确保我不会在意外时放弃它.

实际页面刷新之间的某个地方IE正在向服务器呈现新会话…… ARGH.

例如:
铬:
登录前:myjuzrmccerk1t4eakcliq14
登录后:myjuzrmccerk1t4eakcliq14

IE:
登录前:unyebuc2ikac12xnhpssy0em
登录后:unyebuc2ikac12xnhpssy0em

使用F5或Ctrl-R刷新:
一:ptjt42fjwzgdreyyyo3cmvrs
二:s1hd5aatl5yexeuc125aqhst
三:kbpflurcdcxubux3scmdm4k5

更新2

我已将站点更改为使用“State Server”进行会话并启动相应的服务…行为没有变化.

回答

由于我的代表很低..这不会让我回答我自己的问题另外3个小时…但这里是..

我通过反复试验找到了解决办法.

在sessionstate中的InProc和StateServer都有相同的结果,直到我添加“cookieless = true”

<sessionState mode="StateServer" cookieless="true" />

这会导致会话状态在Chrome和IE(问题所在)中保持一致,并且我的会话ID在页面刷新之间不再更改.我无法确定为什么会发生这种情况,但它仍然是固定的..感谢Mike和antinescience的帮助!

在sessionstate中的InProc和StateServer都有相同的结果,直到我添加“cookieless = true”

这会导致会话状态在Chrome和IE(问题所在)中保持一致,并且我的会话ID在页面刷新之间不再更改.我无法确定为什么会发生这种情况,但它仍然是固定的..感谢Mike和antinescience的帮助!

网友评论