7

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

session_set_cookie_params(0);
session_start();
4

3 回答 3

21

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

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

于 2012-06-09T06:01:01.067 回答
3

解决方案是使用自己的方法实现会话超时。使用一个简单的时间戳来表示最后一个请求的时间,并在每个请求中更新它:

您需要编写与此类似的代码

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

您可以在此处找到有关此内容的更多信息,这类似于您的问题Destroy or unset session when user close the browser without click on logout

它涵盖了您所需要的一切。

于 2012-06-09T06:05:52.390 回答
-3

这个链接很有帮助

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

$.ajax({
    url:"logout.php",
    method:'POST',
    contentType:false,
    processData:false,
    success:function(data)
    {
        alert("session destroyed");
    }
});
于 2018-09-18T11:41:39.607 回答