我有一个网络应用游戏,当用户在游戏中时,如果关闭页面或浏览器,我希望它会自动注销他们的账户。我尝试使用附加到窗口的onbeforeunload事件:
window.onbeforeunload = function() {
// perform logout functions here
}
问题在于,如果用户刷新页面,也会触发该事件。有没有一种方法可以检测用户是完全关闭整个页面,还是只是刷新它?
我有一个网络应用游戏,当用户在游戏中时,如果关闭页面或浏览器,我希望它会自动注销他们的账户。我尝试使用附加到窗口的onbeforeunload事件:
window.onbeforeunload = function() {
// perform logout functions here
}
问题在于,如果用户刷新页面,也会触发该事件。有没有一种方法可以检测用户是完全关闭整个页面,还是只是刷新它?
正如所说,你不能这样做。更糟的是,很多浏览器已经放弃了这个事件,可能是因为被恶意脚本滥用来进行弹窗等操作。
一个可能的解决方法是使用 Ajax 脚本“打电话回家”:如果它在一段时间内保持沉默,那么用户就离开了该网站(关闭了页面或浏览器)。
在页面卸载事件(onunload event)中发送一个请求到服务器,使得会话在n秒后过期(其中n是页面重新加载请求的最大时间,可能是10秒)。然后,让网站的脚本检查是否已安排该事件,如果是,则取消它。这将给您所需的行为。
但是,我建议简单地让会话过期。
如果我没记错的话,JavaScript 应该有一个名为 onWindowClose 的函数,你可以试着搜索一下。
关于 PHP 的解决方案,我不确定是否有任何方法,但我建议你快速查看 PHP 连接处理,特别是 connection_aborted() 和 register_shutdown_function() 函数。