2009-05-17 94 views
4

我有一个网络应用程序游戏,而在游戏中我希望拥有它,所以如果用户关闭了页面或浏览器,它会自动注销它们。我试图使用连接到窗口onbeforeunload事件:如何区分页面刷新和关闭页面

window.onbeforeunload = function() { 
    // perform logout functions here 
} 

的问题是,如果用户刷新页面,也将触发。有没有一种方法可以检测用户是否完全关闭了整个页面,或者只是刷新它?

回答

8

没有检测到的差异。要自动注销用户,您应该在存储登录信息或会话信息的Cookie上设置过期时间。因此,如果您将其设置为1小时,则该用户将基本上在此时间之后退出,因为Cookie将被销毁。如果您希望在自动注销时仍推迟此自动注销,则可以在每次执行某种操作(单击链接,激活AJAX调用等)时重置Cookie的到期时间。这意味着他们会在闲置1小时后注销,而不是登录后只需1小时,这听起来更像您想要的。

如果您将Cookie的到期时间设置为0,则会话结束后会过期。这通常发生在用户完全退出浏览器时。这也是另一种选择。

2

如上所述,你不能。更糟糕的是,这个事件已经被很多浏览器所抛弃,可能是因为它被恶意脚本滥用而导致流行。

一个可能的解决方法是让一个Ajax脚本“打电话回家”:如果它沉默了一段时间,用户只是放弃了该网站(封闭页面或浏览器)。

2

是否有onunload事件向服务器发送请求,导致会话在n秒内过期(其中n是发生页面重新加载请求的最长时间,因此可能为10)。然后让该网站的脚本检查是否计划了该事件,如果是,则取消它。这会给你你想要的行为。

但是,我建议只是让会话过期。

0

如果我没有弄错Javascript应该有一个名为onWindowClose的函数,也许尝试搜索它?

关于PHP解决方案,我不确定是否有,但我建议你快速浏览一下PHP Connection Handling,特别是connection_aborted()和register_shutdown_function()函数。