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

时间:2012-06-09 05:55:06

标签: php session login

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

session_set_cookie_params(0);
session_start();

3 个答案:

答案 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)

this link is very helpfull

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

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