PHP和PDO:在线和离线用户状态

时间:2016-02-18 15:00:20

标签: php mysql

我正在使用我的网站,我想添加一个用户状态,以查看谁在线以及谁在我的网站上离线。我真的不知道怎么能这样做。我已经创建了会员区,我只需要这个来查看活动。

只是想一想我的代码(不完整):

MySQL的: MySQL table screenshot

注册页面,如果没有错误:

if(empty($errors))
{
    $request = $pdo -> prepare("INSERT INTO users SET username = ?, e_mail = ?, password = ?, join_date = NOW()");
    $password = password_hash($_POST["password"], PASSWORD_BCRYPT);
    $request -> execute([$_POST["username"], $_POST["e-mail"], $password]);
    $_SESSION["flash-message"]["success"] = ["Compte créé", "Votre compte a été créé avec succès. Vous pouvez dès à présent vous connecter avec."];
    header("Location: sign-in.php");
    exit();
}

登录页面:

if(empty($errors))
{
    $request = $pdo -> prepare("SELECT * FROM users WHERE username = :username OR e_mail = :username");
    $request -> execute(["username" => $_POST["username"]]);
    $user = $request -> fetch();
    if($user && password_verify($_POST["password"], $user -> password))
    {
        $_SESSION["signed-in"] = $user;
        $_SESSION["flash-message"]["success"] = ["Connexion réussie", "Vous êtes maintenant connecté(e)."];
        header("Location: account.php");
        exit();
    }
    elseif($user && !empty($_POST["username"]) && !empty($_POST["password"]))
    {
        $errors["password"] = "Votre mot de passe est incorrect.";
    }
}

退出页面:

<?php

session_start();

unset($_SESSION["signed-in"]);
$_SESSION["flash-message"]["success"] = ["Déconnexion réussie", "Vous êtes maintenant déconnecté(e)."];
header("Location: .");
exit();

?>

我的用户存储在名为:[“signed-in”]的会话中。现在我需要一个解决方案来做到这一点。我需要做什么?谢谢。

2 个答案:

答案 0 :(得分:1)

您可以将last_access列添加到您的用户表中,每次登录的用户访问某个页面时,都会运行此查询:

"UPDATE users SET last_access='NOW()' WHERE id='$user->id'"

然后,根据用户上次访问页面的时间,分配在线/离线状态会很容易:

"SELECT username, 
(CASE 
WHEN last_access > NOW() - INTERVAL 5 MINUTE THEN 'online' 
ELSE 'offline' 
END) AS user_status 
FROM users"

答案 1 :(得分:0)

在PHP中,您无法知道用户是否仍处于活动状态。 您唯一能做的就是在用户表中创建一个列last_action(日期时间),并在每次用户执行操作时更新日期时间。

因此,如果用户的最后一次操作是X分钟前,则可以假设用户仍处于活动状态。

相关问题