Php 在浏览器上销毁会话或关闭选项卡:适用于Firefox但不适用于Chrome

Php 在浏览器上销毁会话或关闭选项卡:适用于Firefox但不适用于Chrome,php,jquery,Php,Jquery,我有一个要求,关闭浏览器后,当用户打开网站,它应该要求默认登录 我在注销按钮上销毁了会话值,所以当用户单击注销按钮时,它可以正常工作,但如果用户直接关闭浏览器或选项卡,会话不会被销毁 我还尝试将session.cookie\u life值设置为0,但它不起作用。我认为最好的方法是存储会话及其时间,您可以创建一个javascript心跳,它将保持每x秒更新一次时间,因为现在的时间永远不会超过时间+x秒,所以您将有心跳。如果时间超过了它,训练将会暂停,你将退出比赛 登录时: session_star

我有一个要求,关闭浏览器后,当用户打开网站,它应该要求默认登录

我在注销按钮上销毁了会话值,所以当用户单击注销按钮时,它可以正常工作,但如果用户直接关闭浏览器或选项卡,会话不会被销毁


我还尝试将session.cookie\u life值设置为0,但它不起作用。

我认为最好的方法是存储会话及其时间,您可以创建一个javascript心跳,它将保持每x秒更新一次时间,因为现在的时间永远不会超过时间+x秒,所以您将有心跳。如果时间超过了它,训练将会暂停,你将退出比赛

登录时:

session_start();
$_SESSION['last_action'] = time();
每隔几秒(如20秒)进行一次ajax调用:

服务器端keepalive.php:

session_start();
$_SESSION['last_action'] = time();
在每一其他行动中:

session_start();
if ($_SESSION['last_action'] < time() - 30 /* be a little tolerant here */) {
  // destroy the session and quit
}
session_start();
如果($_SESSION['last_action']
浏览器是web标准的实现。它们之间在如何选择和决定实施方面存在差异,有时可能与标准不同

如果您设置了一个会话/临时cookie,那么您的想法应该是,一旦网站关闭,它就会被删除。然而,浏览器并不总是遵循这一原则。它们具有方便的功能,可以保留cookie并恢复用户的会话。如果浏览器突然崩溃或用户意外关闭选项卡,这可能会很有用


另一方面,对于开发人员来说,这会造成干预,而这不是他们应该做的。这不是一种可以控制的事情,因此在关闭选项卡时无法真正删除cookie。解决此问题的唯一方法是将时间戳存储在会话或另一个cookie中,每当加载页面时,检查是否经过了合理的时间戳,在这种情况下,cookie可能会被销毁。这不是一个理想的解决方案,但它是在现代浏览器中实现它的唯一方法

你有什么代码给我们看吗?我已经尝试了JS代码作为链接中的解释,谢谢,但这不是我关心的解决方案。我正在寻找作为用户关闭浏览器会话应销毁。它在Firefox上运行良好,没有任何附加代码,但在Chrome上不起作用。
session_start();
if ($_SESSION['last_action'] < time() - 30 /* be a little tolerant here */) {
  // destroy the session and quit
}