在浏览器选项卡关闭时销毁会话


destroy session when broswer tab closed

我有用户登录/注销应用程序:我想破坏会话,当我关闭浏览器((所有选项卡))、IE、Firefox 工作时它工作正常。但是我想在用户关闭单个选项卡时销毁会话。我正在使用:

session_set_cookie_params(0);
session_start();

浏览器仅在退出整个浏览器进程时销毁会话 cookie。没有可靠的方法来确定用户是否/何时关闭了选项卡。您可以附加到一个onbeforeunload处理程序,并希望设法对服务器进行 ajax 调用以说选项卡的关闭,但它不可靠。

如果用户在您的网站上打开了两个或多个表,该怎么办?如果他们关闭一个选项卡,即使用户完全打算继续使用您的网站,另一个选项卡也会有效地被注销。

解决方案是使用自己的方法实现会话超时。使用表示上次请求时间的简单时间戳,并随每个请求进行更新:

你需要编写类似于这个的东西

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
    // request 30 minates ago
    session_destroy();
    session_unset();
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time

您可以在此处找到有关此内容的更多信息,这类似于您的问题 当用户关闭浏览器而不单击注销时销毁或取消设置会话。

它涵盖了您所需的一切。

这个链接很有帮助

但是你需要向函数endsession添加代码,这是JavaScript函数,你可以使用ajax调用你的logout.php。 它对我有用:

$.ajax({
    url:"logout.php",
    method:'POST',
    contentType:false,
    processData:false,
    success:function(data)
    {
        alert("session destroyed");
    }
});