我有一个用户登录/注销应用程序: 当我关闭浏览器(所有标签),IE和Firefox都可以正常销毁会话。 但是我希望在用户关闭单个选项卡时销毁会话。 我正在使用:
session_set_cookie_params(0);
session_start();
我有一个用户登录/注销应用程序: 当我关闭浏览器(所有标签),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");
}
});
onbeforeunload
也会在用户刷新页面时起作用,我希望在用户关闭浏览器或关闭选项卡时销毁会话。 - beginner web developer