2011-04-26 86 views
2

我已经阅读,该asp.net会话变量默认最后20分钟的非活动浏览器。会话状态asp.net生命期限

如果用户注销并立即登录,会发生什么情况?或者关闭浏览器并重新启动它?会话状态“死亡”? 如果没有 - evey注销或浏览器关闭会导致死亡的替代方法是什么?

感谢

回答

2

会话状态完全依赖浏览器为“会话”中的每个请求提供的cookie。当服务器接收到每个请求的cookie时,它会检查自上次请求以来默认的20分钟是否已经过去。

因此,问题的答案:

如果用户注销并 立刻登录时会发生什么?

的cookie被标上注销无效的服务器,当他们再次登录

或关闭浏览器,然后重新启动它被赋予新的品牌?

提供会话没有过期也不会做出任何差别(如浏览器仍然会与每个请求一起发送cookie)

使其在埃维注销或浏览器死 收盘?

虽然您可以将过期日期设置为过去,但无法使Cookie“死亡”。您无法检测到关闭浏览器的用户。

1

会话“死” 20.分钟不活动后(默认),或者如果它是由程序员清除。

要清除会话,请调用其上的Abandon方法。在注销时执行此操作。

没有简单的方法可以检测到浏览器窗口已关闭(例如,您可以使用Ajax从浏览器进行轮询),因为Web是无状态的。但是,如果发生这种情况(并且没有其他浏览器实例仍然处于打开状态),那么当用户启动一个新实例并访问您的网站时,他将得到一个新的会话(尽管现有的实例会一直存在直到超时)。

1

注销时可能需要手动清除会话。 浏览器的新实例应该有新会话。

2

无论会话保持活动依赖于两件事情:

  • 无论会话是还活着的服务器上(20个您分钟超时,或以编程方式放弃会话)
  • Whethet客户端(浏览器)将Session cookie传输到服务器,因此会话可以被识别。

的会话cookie担任非持久性饼干,这意味着它们应该由浏览器(的浏览器),一个会话保持,所以你关闭浏览器,然后重新启动它后,他们不应该被发送。但实际上,这完全取决于客户端浏览器的实现。

这里的教训:是的,当普通用户关闭浏览器时,会话过期。但是你不能也不应该依赖它来做任何重要的事情。

1

Session.Abandon()将刷新所有会话。当用户注销时调用它。所以每次他注销并登录时,都会创建新的会话。会话超时和关闭浏览器将在下次自动导致新的会话。