-1

我有下面的脚本。当我们关闭窗口时,用户注销正在工作,但在数据库中状态没有改变。我的意思是状态 1 显示用户在线,状态 0 显示离线,但是当用户通过关闭窗口注销时状态没有改变。

如果我们点击“注销”按钮,onlu 就会改变状态。

if($_SESSION['username'] != "admin")
{
    $timeout = 1; 
    $logout_redirect_url = "logout.php"; 
    $timeout = $timeout * 60; 

    if(isset($_SESSION['start_time']))
    {
        $elapsed_time = time() - $_SESSION['start_time'];
        if ($elapsed_time >= $timeout)
        {
            $db->query($strQuery1);
            header("Location: $logout_redirect_url");
        }
    }

    $_SESSION['start_time'] = time();
}
4

2 回答 2

0

我不知道这是否是更好的方法如果你想动态地知道用户当前是否在你的网站上,你可以在你的数据库中设置一个最后连接的值(它保存一个日期时间值)。当用户重新加载新页面时,此值“last connect”将被重置,可能是当您应用测试以查看他当前是否已登录时。

之后,您创建一个读取值“last connect”的 cron,您可以知道用户是否超时。

于 2012-10-23T10:21:35.010 回答
0

您可以做的是添加一个 javascriptwindow.onBeforeUnload事件,该事件会触发 ajax 调用并更新您的查询。

但它并不安全,因为它是唯一的客户端,但值得一试。

另一种方法是检查会话时间,如果会话在您想要的超时时间内未刷新,则手动注销用户。

PS:你也应该看看这个手​​册,会有帮助的。

于 2012-10-23T10:23:41.737 回答