gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:56:31 26 4
gpt4 key购买 nike

斜体字均为原帖,以下编辑均为非斜体

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

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”时......当我进行重定向时,我的 session 变量“用户名”消失了。实际上, session 的项目计数为 0。在重定向之前设置了 session 变量并且它是正确的。
我在 Windows Server 2008 R2 64 位机器和 Windows 7 64 位机器上得到相同的结果。
我正在使用同时托管 IIS 和 SQL 的单个服务器。我没有使用 session 服务器。
我已经追查到了......代码完全按照需要运行,直到重定向。接收凭据,执行我的存储过程以验证...在重定向之前设置 session 变量(我可以看到 session 和变量,并且值是正确的)...然后重定向...并且如上所述,使用 Chrome 它可以正常工作根据需要...使用 IE, session 在重定向时丢失。
我也试过这个,但没有成功:
Response.Redirect("/", false);
所以我确信 IE 正在做的事情,可能是在客户端上设置 cookie,这导致浏览器和服务器 session 之间不匹配。
我不应该做 response.redirect 吗???如果我执行 response.redirect,如何防止 session 重置?再次记住,当我使用 Chrome 时不会发生这种情况。
令人沮丧...
谢谢你的帮助!

新信息

在尝试根据答案关闭 IE 缓存后......我决定将 sessionID 输出到浏览器,以便我可以看到它是什么。

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

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

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

我只是在用户单击注销时调用 session.abandon,但已注释掉该代码(以防万一)以确保我不会意外放弃它。

在实际页面刷新之间的某个地方,IE 将自己呈现给服务器以进行新 session ... ARGH。

例如:
Chrome 合金:
登录前:myjuzrmccerk1t4eakcliq14
登录后:myjuzrmccerk1t4eakcliq14

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

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

更新 2

我已将站点更改为对 session 使用“状态服务器”并启动了相应的服务...行为没有变化。

答案

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

我找到了一个修复方法……通过反复试验。

sessionstate 中的 InProc 和 StateServer 都有相同的结果,直到我添加了“cookieless=true”
<sessionState mode="StateServer" cookieless="true" />

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

最佳答案

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

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

关于重定向后 ASP.NET session 丢失,但仅限于 IE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15602852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com