会话生命周期问题

时间:2011-05-05 16:26:11

标签: asp.net session-variables iisreset

我对ASP.NET中会话的生命周期感到有些困惑,这是我的测试用例。

用户登录后,我将一些信息保存到会话变量(例如Session["bob"]="bob"),然后我执行“IIS重置”。用户仍然登录,但会话数据为null(例如Session["bob"].ToString()会引发NullReferenceException

我预计会话数据仍然存在。除了注销用户之外,我能做些什么吗?我希望只要用户仍然登录,会话数据就会存在。

任何良好的链接,以便我了解正在发生的事情,以及对实际问题的任何帮助非常感谢。我试图谷歌这个,但无法以某种方式构建问题以获得我想要的东西。

2 个答案:

答案 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