编辑
这个问题似乎奇怪地消失了。我的环境一定有什么不好的地方。我投票结束这个问题。
当用户登录时,我会使用登录页面代码后面的一堆数据来填充会话。然后我将用户重定向到应用程序中的另一个页面。我还有一些会话恢复逻辑,当用户的会话到期时,它会根据身份验证票证重新填充会话。
似乎正在发生的事情是,我用登录页面上的一堆数据来填充用户的会话,然后重定向它们,而我重定向到的页面的请求似乎没有会话,所以应用程序必须重新填充它。我不明白-我看了cookie,会话ID没有改变,并且我不会在代码中的任何位置重置会话数据。这是ASP.NET的"feauture"吗?我使用的是ASP.NET 4.0。
编辑:
需要澄清的是:在登录请求期间(甚至点击登录按钮),会话被夸大了。在下一个请求中,会话似乎不再被填充,所以我最终不得不重新填充会话。用户在那之后提出的任何请求,会话似乎都会"卡住",并且我有一个适当膨胀的会话来处理后续请求。
要回答您的问题,SessionState
数据独立于登录/注销。
数据可能从SessionState
"消失"的原因有几个。
- 如果您在web服务器场上使用
InProc
SessionState
,则服务器场中的其他计算机可能会为用户提供后续请求 - 如果
SessionState
太满(就像缓存一样),它可以清除 - 如果使用自定义
SessionStateStoreProvider
,则可能无法正确保存/检索SessionState