我有用户登录/注销应用程序:我想销毁会话,当我关闭浏览器((所有选项卡))、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
您可以在此处找到有关此内容的更多信息,这类似于您的问题Destroy or unset session when user close the browser without click on logout。
它涵盖了您所需要的一切。
但是你需要在函数 endsession 中添加代码,它是 JavaScript 函数,你可以使用 ajax 来调用你的 logout.php。它对我有用:
$.ajax({
url:"logout.php",
method:'POST',
contentType:false,
processData:false,
success:function(data)
{
alert("session destroyed");
}
});