2012-10-23 30 views
-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(); 
} 
+0

从你的问题的描述,我会假设浏览器不重定向。重定向是否发生在浏览器中?此外,如果您正确缩进代码,您可能会更容易发现逻辑或控制流错误。 – hakre

+3

您的数据库应该如何获得有关关闭浏览器的用户的知识? –

+0

@ user1755316请在发布之前格式化您的代码,以便更好地阅读。 – Peon

回答

0

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

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

0

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

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

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

PS:你也应该看看this手册,会很有帮助。