我有一个要求,关闭浏览器后,当用户打开网站,它应该要求默认登录。
我销毁了注销按钮上的会话值,所以当用户单击注销按钮时,它可以正常工作,但如果用户直接关闭浏览器或选项卡,会话不会被销毁。
我也曾尝试将session.cookie_lifetime值设置为0,但它不起作用。
发布于 2019-04-13 03:39:00
在我看来,最好的方法是存储会话的时间,你可以创建一个javascript心跳,它将保持时间每x秒更新一次,现在看起来从来没有比time+x秒更长的时间,然后你会有你的心跳。如果时间超过它,会话将超时,您将退出比赛。
登录时:
session_start();
$_SESSION['last_action'] = time();
每隔几秒(如20秒)调用一次ajax:
windows.setInterval(keepAliveCall, 20000);
服务器端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
}
发布于 2019-04-13 05:38:53
浏览器是web标准的一种实现。它们之间在如何选择和决定实现它们方面存在差异,有时可能与标准不同。
如果你设置了一个会话/临时cookie,这个想法应该是一旦网站关闭,它就会被删除。然而,浏览器并不总是遵循这一原则。它们具有方便的功能,可以保留cookie并恢复用户的会话。如果浏览器突然崩溃或用户不小心关闭了选项卡,这可能会很有用。
另一方面,对于开发人员来说,这造成了干预,这不是他们应该采取的行为。这不是一种可以控制的事情,所以当选项卡关闭时,您不能真正删除cookie。解决这个问题的唯一方法是在一个会话或另一个cookie中存储一个时间戳,并在任何时候加载一个页面时,检查是否已经过了一个合理的时间戳,在这种情况下,cookie可能会被销毁。这不是一个理想的解决方案,但它是在现代浏览器中实现它的唯一方法。
https://stackoverflow.com/questions/55658372
复制相似问题