有没有办法在用户刚刚用右上角的红色小框X进行X'ing时杀死会话时做一个Session.Abandon()?我看到的情况是,在“X out”之后,用户重新进入并且看起来会话变量仍然存在?我猜探险家会保持原样吗? (我不确定这一点)。
答案 0 :(得分:2)
你可以尝试在OnUnload事件中做一个AJAX类型的回调 - 但是,正如其他人提到的那样,你必须知道其他标签是开放的(不容易),它仍然不能保证你得到那个事件。
为了获得类似的效果,有很多事情要做。
会话Cookie应具有空/空到期时间。这可确保浏览器在浏览器关闭后从浏览器中删除会话。
可以使用较短的SessionState超时值设置ASP会话。这意味着如果在此期间内没有客户活动,则会话将过期。
这样做的副作用是,如果用户只是在查看网站,而不是执行活动(无论浏览器是否仍处于打开状态) - 会话可能会过期。
这可以通过让Javascript计时器通过AJAX调用或类似方式定期ping回服务器来解决。这种副作用是它产生更多的网站流量。
答案 1 :(得分:1)
服务器通常不知道客户端上的此类事件。服务器可以收到任何通知的唯一方法是是否有请求发回给它。我想你可以在JavaScript中创建这样的通知,但是你应该记住,会话记住会话不是每页,而是(通常)每个用户,这意味着你需要跟踪用户打开了多少个选项卡/窗口,这样就不会在不应该的情况下终止会话。
就个人而言,我通常会尝试设计网络应用程序,以便它们能够很好地处理会话的默认处理,提供一个特定的“注销”命令来终止会话,或者只是让它达到超时并死掉。 / p>