ASP.NET中丢失的会话状态

时间:2019-02-25 01:24:55

标签: c# asp.net session webforms

我是ASP.NET的初学者,只是有关会话状态的问题。我正在读一本教科书,上面写着:

如果用户关闭并重新启动浏览器,并且会话实际上仍保留在Web服务器的内存中,则会话状态将丢失,因为ASP.NET不知道客户端已关闭浏览器或更改了窗口。会话将在内存中徘徊,保持不可访问,直到最终终止

我不太了解“保持不可访问”的含义,因为在客户端计算机上使用会话集合时,将首次创建名为“ ASP.NET_SessionId”的cookie,因此即使用户关闭并然后重新启动浏览器并再次访问该页面,因此,如果会话仍保留在Web服务器的内存中,那么包含会话ID的cookie仍将发送到服务器,为什么它无法访问?

1 个答案:

答案 0 :(得分:0)

ASP.NET_SessionId cookie被创建为“会话cookie”(不是“持久”的-How do I create a persistent vs a non-persistent cookie?),并且当浏览器完全关闭时(如今很少发生),浏览器将删除所有“会话” cookie。由于cookie的值是加密安全的随机数,因此没有实用的方法来重建cookie的值并因此从服务器检索旧会话的值。与cookie值相关联的数据将位于服务器的内存(如果使用SQL会话状态,则位于SQL的内存)中,但是不会有任何请求可以请求它。最终,当服务器端到期(或者在内存中会话状态下服务器IIS进程关闭)时,数据将被清除。

请注意,大多数现代浏览器在关闭所有实例时实际上并不“关闭会话”,因此在实践中很少看到这种情况。您始终可以“清除所有cookie”以查看其发生情况。

相关问题