在我的网络应用程序中,我经常可以看到,当我几分钟没有做任何事情,然后我回来,刷新页面 - 我仍在登录,但我的会话数据全部消失了!
在login()
操作中,我设置了一些页面正常工作所需的Session[]
个对象。我不知道为什么会这样做,但是我需要它在用户清除会话数据时将其记录下来。
我已经阅读了关于设置<sessionState mode="InProc" timeout="20"/>
但是每次刷新页面时都会刷新此超时吗?或者从我登录后的20分钟后它会用完吗?如果我让这个计时器比我保持在线用户更大,该怎么办?
答案 0 :(得分:3)
回发到服务器会使会话保持更长时间。这是一个滑动过期。有两种方法可以从客户端处理,客户端不知道这20分钟的超时:
答案 1 :(得分:1)
我假设您正在使用表单身份验证。那是对的吗?如果是这样,您需要使表单身份验证票证的超时与会话超时匹配。
用户通过比最初看起来更复杂的过程保持登录状态。 Cookie存储在用户的浏览器中,称为Forms Authentication Ticket。如果用户保持空闲超过会话超时限制,则服务器将丢弃该会话。但是在下一个请求中,表单身份验证票证将传递回Web服务器。服务器验证票证,如果它仍然有效,则用户将重新登录。
如您所见,用户的会话未恢复。如果您想要这种行为,则必须检测该情况并自行恢复会话。
解决方案是将Forms Authentication Ticket的超时设置为与Session超时相同。您可以在Web.config文件as explained here中完成此任务:
<system.web>
<authentication mode="Forms">
<forms timeout="20"/>
</authentication>
</system.web>
超时值以分钟为单位。一旦达到Forms Authentication Ticket的超时,用户将被注销。这与会话的超时无关,但如果它们相同,则它们将在大致相同的时间到期。如果您想要完全安全,请将Forms Authentication Ticket超时设置为略短于会话超时。用户将在会话超时之前注销。当他们再次登录时,他们将获得一个新的会话。旧会议最终会自行结束。
答案 2 :(得分:0)
尝试检查:
问:在Proc模式下,为什么我偶尔会丢失所有会话?
答:请参阅“了解会话”中的“健壮性”部分 状态模式“本文的一部分。
<强>鲁棒性强>
InProc - 如果工作进程,会话状态将丢失 (aspnet_wp.exe)回收,或者appdomain重新启动。这是因为 会话状态存储在appdomain的内存空间中。该 重启可能是由某些配置文件的修改引起的 as web.config和machine.config,或\ bin目录中的任何更改 (比如使用VS重新编译应用程序后的新DLL)For 有关详细信息,请参阅KB324772。在v1中,还会有一个错误 工作进程重启。它在SP2和v1.1中修复。看到 KB321792。