我对ASP.NET中会话的生命周期感到有些困惑,这是我的测试用例。
用户登录后,我将一些信息保存到会话变量(例如Session["bob"]="bob"
),然后我执行“IIS重置”。用户仍然登录,但会话数据为null
(例如Session["bob"].ToString()
会引发NullReferenceException
。
我预计会话数据仍然存在。除了注销用户之外,我能做些什么吗?我希望只要用户仍然登录,会话数据就会存在。
任何良好的链接,以便我了解正在发生的事情,以及对实际问题的任何帮助非常感谢。我试图谷歌这个,但无法以某种方式构建问题以获得我想要的东西。
答案 0 :(得分:7)
您所看到的行为 - Session
内容无法在IIS重置事件中生存 - 是由于存储会话值的位置。默认情况下,这些值存储在ASP.NET“工作进程”的内存中,这是运行ASP.NET网站的程序。
执行“IIS重置”时,关闭整个IIS服务器,包括ASP.NET Worker Process。这意味着会话的内容将从内存中删除。您的用户似乎仍然登录,因为它由存储在浏览器中的cookie控制。如果cookie仍然有效,则登录为。
如果您希望会话状态在IIS重置(或导致ASP.NET工作进程重新启动的任何其他内容)中继续存在,则需要将Session对象存储在其他位置。 ASP.NET完全支持使用不同的会话存储“模式”。阅读MSDN文章“Session-State Modes”中的内容。
有关会话的一般概述,请查看MSDN上的“ASP.NET Session State Overview”文章。
答案 1 :(得分:0)
是的,这是对的,但是有一段时间它会发生,那时会话当时没有被正确删除
你必须检查会话
If Session("username") = nothing then
Response.redirect("~/default.aspx")
End if