我有一个要求,当用户打开网站时关闭浏览器后,默认情况下应要求登录。
我销毁了注销按钮上的会话值,因此当用户单击注销按钮时,它可以正常工作,但是如果用户直接关闭浏览器或选项卡,则会话不会被破坏。
我还尝试将session.cookie_lifetime值设置为0,但不起作用。
答案 0 :(得分:1)
在我看来,执行此操作的最佳方法是将会话与时间存储在一起,您可以创建一个Javascript心跳,使时间每x秒更新一次,并且看起来现在从来没有比现在更长的时间了时间+ 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
}
答案 1 :(得分:0)
浏览器是Web标准的实现。他们在选择执行决策的方式方面存在差异,有时可能会与标准有所不同。
如果您设置了会话/临时Cookie,则其想法应是在关闭网站后立即将其删除。但是,浏览器并不总是以此为福音。它们具有便利的功能,可以保留cookie并恢复用户的会话。如果浏览器突然崩溃或用户不小心关闭了选项卡,这可能会很有用。
另一方面,对于开发人员来说,这会造成干预,而这并不是他们应该如何行为的。这不是可以控制的事情,因此在关闭标签页时您无法真正删除Cookie。解决该问题的唯一方法是将时间戳存储在会话或另一个Cookie中,并且无论何时加载页面,请检查是否经过了合理的时间戳,在这种情况下,该cookie可能会被破坏。这不是理想的解决方案,但这是在现代浏览器中实施的唯一方法。