浏览器关闭时如何运行查询?

时间:2012-10-23 10:11:34

标签: php

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

如果我们点击“注销”按钮,则会在状态发生变化。

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();
}

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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

PS:您还应该查看this手册,这将有所帮助。