我有用户登录/注销应用程序: 我想破坏会话,当我关闭浏览器((所有标签)),IE,Firefox工作时它的工作正常。 但是当用户关闭单个选项卡时,我想破坏会话。 我正在使用:
session_set_cookie_params(0);
session_start();
答案 0 :(得分:17)
浏览器仅在退出整个浏览器进程时销毁会话cookie。没有可靠的方法来确定用户是否/何时关闭了标签。你可以附加一个onbeforeunload
处理程序,并希望能够对服务器进行ajax调用以说明标签的关闭,但它不可靠。
如果用户在您的网站上打开了两个或更多表,该怎么办?如果他们关闭一个标签,另一个标签将被有效注销,即使用户完全打算继续使用您的网站。
答案 1 :(得分: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 clicking on logout类似的内容。
它涵盖了你所需要的一切。
答案 2 :(得分:-2)
但是您需要向函数endsession添加代码,该函数是JavaScript函数,可以使用ajax调用logout.php。它对我有用:
$.ajax({
url:"logout.php",
method:'POST',
contentType:false,
processData:false,
success:function(data)
{
alert("session destroyed");
}
});