如何区分页面刷新和关闭页面的区别

4

我有一个网络应用游戏,当用户在游戏中时,如果关闭页面或浏览器,我希望它会自动注销他们的账户。我尝试使用附加到窗口的onbeforeunload事件:

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

问题在于,如果用户刷新页面,也会触发该事件。有没有一种方法可以检测用户是完全关闭整个页面,还是只是刷新它?

4个回答

8
没有明显的区别。为了自动注销用户,您应该在存储登录或会话信息的cookie上设置过期时间。因此,如果您将其设置为1小时,则用户在该时间之后基本上会注销,因为cookie将被销毁。如果您想要在他们仍在与站点交互时推迟此自动注销,您可以每次他们执行某些操作(点击链接,激活AJAX调用等)时重置cookie的过期时间。这意味着他们会在1小时内没有活动后注销,而不仅仅是从登录开始的1小时,这听起来更像是您想要的。
如果将cookie的过期时间设置为0,则它将在会话结束后过期。当用户完全退出浏览器时,通常会发生这种情况。这也是另一个选项。

2

正如所说,你不能这样做。更糟的是,很多浏览器已经放弃了这个事件,可能是因为被恶意脚本滥用来进行弹窗等操作。

一个可能的解决方法是使用 Ajax 脚本“打电话回家”:如果它在一段时间内保持沉默,那么用户就离开了该网站(关闭了页面或浏览器)。


2

在页面卸载事件(onunload event)中发送一个请求到服务器,使得会话在n秒后过期(其中n是页面重新加载请求的最大时间,可能是10秒)。然后,让网站的脚本检查是否已安排该事件,如果是,则取消它。这将给您所需的行为。

但是,我建议简单地让会话过期。


0

如果我没记错的话,JavaScript 应该有一个名为 onWindowClose 的函数,你可以试着搜索一下。

关于 PHP 的解决方案,我不确定是否有任何方法,但我建议你快速查看 PHP 连接处理,特别是 connection_aborted() 和 register_shutdown_function() 函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接