PHP中用于使用户一次从一台计算机登录的最佳方法

Joe*_*Joe 5 php session login

任何人都可以在PHP中建议一个最好的方法,让用户一次只能从一台机器登录.

Mor*_*dur 5

在会话中设置一个键,该键存储在用户表中的数据库中:

表用户

  • 用户身份
  • 用户名
  • 密码
  • 令牌

登录时:

  • 创建随机令牌
  • 更新用户 SET token='MyRandomToken' WHERE username='username' and password='password';
  • $_SESSION['login_token'] = 'MyRandomToken';

在每一页上:

  • SELECT user_id, username, token FROM user WHERE token='$_SESSION['login_token']';
  • 如果未找到,则登录令牌不再有效。

这可确保在有更新的登录名时登录名自动过期。在任何时候,每个帐户只能有一个登录用户。

更新

刚刚看到您对问题的评论。我的回答对您不起作用,因为它不会禁止第二次登录,而是使之前的任何登录无效。

如果您想防止第二次登录,那么使用您在每个页面上更新的时间戳是最好的解决方案:

登录时:

(假设 MySQL :)

SELECT user_id
FROM user
WHERE username='username'
AND password='password'
AND last_access < DATE_SUB(NOW(), INTERVAL 10 MINUTE);
Run Code Online (Sandbox Code Playgroud)

如果找到一行,则该帐户存在并且该登录不会被另一个登录阻止。您可能希望将其拆分为两个查询(首先检查登录,然后检查上次访问),以便为失败的登录提供更好的错误消息,否则为“帐户不存在”或“已阻止”。

在每一页上:

UPDATE user
SET last_access=NOW()
WHERE user_id='CurrentUserId';
Run Code Online (Sandbox Code Playgroud)