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

Php 如何区分页面刷新和关闭页面之间的区别,php,javascript,Php,Javascript,我有一个web应用程序游戏,而在游戏中我想要它,因此如果用户关闭页面或浏览器,它将自动注销他们。我尝试使用附加到窗口的onbeforeunload事件: window.onbeforeunload = function() { // perform logout functions here } 问题是,如果用户刷新页面,也会触发。有没有一种方法可以检测到用户是否完全关闭整个页面,或者只是刷新页面?没有检测到的区别。要自动注销用户,应在存储登录或会话信息的cookie上设置过期时间。因

我有一个web应用程序游戏,而在游戏中我想要它,因此如果用户关闭页面或浏览器,它将自动注销他们。我尝试使用附加到窗口的onbeforeunload事件:

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

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

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


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

如前所述,你不能。更糟糕的是,很多浏览器都放弃了这个事件,可能是因为它被恶意脚本滥用了,比如pop-under等等


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

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


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

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

关于PHP解决方案,我不确定是否有任何解决方案,但我建议您快速查看一下,特别是连接_aborted()和register_shutdown_function()函数