我正在使用我的网站,我想添加一个用户状态,以查看谁在线以及谁在我的网站上离线。我真的不知道怎么能这样做。我已经创建了会员区,我只需要这个来查看活动。
只是想一想我的代码(不完整):
MySQL的:
注册页面,如果没有错误:
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”]的会话中。现在我需要一个解决方案来做到这一点。我需要做什么?谢谢。
答案 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分钟前,则可以假设用户仍处于活动状态。