如何在一段时间后自动注销用户?

时间:2016-04-25 13:33:04

标签: php mysql

我对网站创作相当新,但我创建了一个网站,希望显示谁在线,谁在线下。使用最好的方法,并将它们记录下来,如果它们长时间处于非活动状态。截至目前,当有人登录时,会将列"online"更新为"1"。然后,当有人退出时,会将"online"更新为"0"

我在数据库中也有一个时间戳,告诉我他们何时登录,以及何时注销。 (正如我所说,我对这一切有点新意),正如有人所说,为什么我需要"online""login_time"。我只是觉得它可能更容易。这是我的代码...

的login.php:

    session_start();
    session_regenerate_id (true);
    $_SESSION['user_id']= $id;  
    $_SESSION['user_name'] = $user_name;
    $_SESSION['login_time'] = time();
    mysql_query("update users set online='0' where login_time >= 60");
    mysql_query("update users set online='1' where id='$id'") or die(mysql_error());
               }
      header("Location: home.php");
     }

有更好的方法吗?并包括一个更简单的方法来在5分钟不活动后将某人更新为离线?

1 个答案:

答案 0 :(得分:0)

如果出现问题,请尝试通过调试来解决问题。首先,尝试在mySQL控制台中运行命令:

mysql> UPDATE users set online='0' WHERE login_time = > 60;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '> 60' at line 1

大于的正确语法是> =(低/大总是先来)。

login_time >= 60还需要您手动每秒更新一次创建高数据库负载的时间。您的UPDATE命令需要每秒运行一次以捕获所有用户。

您应该考虑存储和匹配登录(或最后一次操作)日期时间:

登录时:

UPDATE users SET login_time=NOW() WHERE id=?

检查用户是否仍在线:

SELECT * FROM users WHERE login_time < DATE_SUB(NOW(),INTERVAL 5 minute)

有关DATE_SUB和INTERVAL的更多信息,请参阅https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add上的mySQL文档。

PS:The PHP manual states 此扩展在PHP 5.5.0中已弃用,并已在PHP 7.0.0中删除。相反,应该使用MySQLi或PDO_MySQL扩展。关于 mysql_query