2

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

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

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

非常感谢任何好的链接,以便我了解发生了什么,以及对实际问题的任何帮助。我试图用谷歌搜索这个,但无法以某种方式提出问题以获得我想要的。

4

2 回答 2

7

您看到的行为 -Session内容无法在 IIS 重置事件中存活 - 是由于 Session 值的存储位置。默认情况下,这些值存储在 ASP.NET“工作进程”的内存中,它是运行 ASP.NET 网站的程序。

当您执行“IIS 重置”时,您会关闭整个 IIS 服务器,包括 ASP.NET 工作进程。这意味着 Session 的内容将从内存中删除。您的用户似乎仍处于登录状态,因为这是由存储在浏览器中的 cookie 控制的。如果 cookie 仍然有效,则登录有效。

如果您希望您的 Session 状态在 IIS 重置(或任何其他导致 ASP.NET 工作进程重新启动的情况下)仍然存在,您需要将 Session 对象存储在另一个地方。ASP.NET 通过使用不同的会话存储“模式”完全支持这一点。阅读 MSDN 文章“会话状态模式”中的相关内容。

有关会话的一般概述,请查看 MSDN 上的“ ASP.NET 会话状态概述”文章。

于 2011-06-24T00:46:27.057 回答
0

是的,它是对的,但有时它会发生然后会话当时没有正确删除

你必须检查会话

If Session("username") = nothing then

Response.redirect("~/default.aspx")

End if
于 2011-05-05T16:30:04.340 回答