【发布时间】:2011-04-27 04:43:12
【问题描述】:
我已经阅读了 asp.net 会话变量,默认情况下持续 20 分钟的非活动浏览器。
如果用户退出并立即登录会发生什么?还是关闭浏览器并重新启动它?会话状态“死亡”? 如果不是 - 在每次注销或浏览器关闭时让它死掉的替代方法是什么?
谢谢
【问题讨论】:
我已经阅读了 asp.net 会话变量,默认情况下持续 20 分钟的非活动浏览器。
如果用户退出并立即登录会发生什么?还是关闭浏览器并重新启动它?会话状态“死亡”? 如果不是 - 在每次注销或浏览器关闭时让它死掉的替代方法是什么?
谢谢
【问题讨论】:
会话状态完全依赖于浏览器为“会话”中的每个请求提供的 cookie 的存在。当服务器接收到每个请求的 cookie 时,它会检查自上次请求以来是否已经过了默认的 20 分钟。
因此,您的问题的答案:
如果用户注销并且 立即登录?
服务器在注销时将 cookie 标记为无效,并在重新登录时分配一个全新的 cookie
还是关闭浏览器重新启动?
如果会话没有过期,它不会有任何区别(因为浏览器仍然会随每个请求一起发送 cookie)
让它在每次登出或浏览器时死掉 关门了吗?
尽管您可以将 cookie 的过期日期设置为过去,但您不能让 cookie 死掉。您无法检测到用户关闭浏览器。
【讨论】:
会话是否保持活跃取决于两件事:
会话 cookie 作为非持久性 cookie 提供,这意味着它们应由浏览器为(浏览器的)一个会话维护,因此在您关闭浏览器并重新启动浏览器后不应发送它们。但实际上,这完全取决于客户端浏览器的实现。
这里的教训:是的,当普通用户关闭浏览器时,会话就会过期。但是你不能也不应该在任何重要的事情上依赖它。
【讨论】:
注销时,您可能需要手动清除会话。 浏览器的新实例应该有新的会话。
【讨论】:
Session.Abandon() 将刷新所有会话。当用户注销时调用它。所以每次他注销并登录时,都会创建新的会话。会话超时和关闭浏览器将自动导致下次会话。
【讨论】:
会话在 20 分钟不活动后“终止”(默认情况下),或者如果它被程序员清除。
要清除会话,请在其上调用 Abandon 方法。在注销时执行此操作。
没有简单的方法可以检测浏览器窗口是否关闭(例如,您可以使用 Ajax 从浏览器进行轮询),因为 Web 是无状态的。但是,如果发生这种情况(并且没有其他浏览器实例仍然打开),当用户启动一个新实例并访问您的网站时,他将获得一个新会话(尽管现有会话会一直持续到超时)。
【讨论】:
我假设您希望用户退出 - 您希望销毁会话,而不仅仅是删除会话键/值对。
调用:
Session.Abandon();
将销毁会话。 http://msdn.microsoft.com/en-us/library/ms524310(v=vs.90).aspx
【讨论】: