首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >销毁浏览器上的会话或Tab关闭:适用于Firefox,但不适用于Chrome

销毁浏览器上的会话或Tab关闭:适用于Firefox,但不适用于Chrome
EN

Stack Overflow用户
提问于 2019-04-13 03:33:44
回答 2查看 458关注 0票数 0

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

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

我也曾尝试将session.cookie_lifetime值设置为0,但它不起作用。

EN

回答 2

Stack Overflow用户

发布于 2019-04-13 03:39:00

在我看来,最好的方法是存储会话的时间,你可以创建一个javascript心跳,它将保持时间每x秒更新一次,现在看起来从来没有比time+x秒更长的时间,然后你会有你的心跳。如果时间超过它,会话将超时,您将退出比赛。

登录时:

代码语言:javascript
运行
复制
session_start();
$_SESSION['last_action'] = time();

每隔几秒(如20秒)调用一次ajax:

代码语言:javascript
运行
复制
windows.setInterval(keepAliveCall, 20000);

服务器端keepalive.php:

代码语言:javascript
运行
复制
session_start();
$_SESSION['last_action'] = time();

在每个其他操作上:

代码语言:javascript
运行
复制
session_start();
if ($_SESSION['last_action'] < time() - 30 /* be a little tolerant here */) {
  // destroy the session and quit
}
票数 1
EN

Stack Overflow用户

发布于 2019-04-13 05:38:53

浏览器是web标准的一种实现。它们之间在如何选择和决定实现它们方面存在差异,有时可能与标准不同。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55658372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档