如何检查用户是否已登录?
这样,如果其他浏览器中的用户无法使用同一帐户登录。
另外,这是一个很好的解决方案,还是应该让用户在其他浏览器中登录,然后注销当前用户并显示一条消息(您从其他位置登录)就像信使一样?
答案 0 :(得分:3)
在登录时生成随机令牌(或使用sessionid),并将其存储在数据库和用户cookie中。每次访问页面时,请确保用户令牌与数据库条目匹配。如果两者不匹配,请提醒用户他们已在其他地方登录。
您还可以存储登录时间,该登录时间随后是分配令牌的时间,并且在允许其他用户使用相同ID登录之前需要30分钟。
答案 1 :(得分:2)
使用sessions是一种很好的方法,是控制身份验证的常用方法。
流程通常看起来像这样:
$_SESSION['logged_in'] = true
或类似内容的会话数据中$_SESSION['logged_in']
以查看用户是否已登录。为了控制用户的登录,你可以简单地在数据库中有一个字段(users
表没问题),指明用户的当前会话ID(用session_id()
检索),如果它与您刚刚收到的cookie值不匹配,那么您立即为该ID调用session_destroy()
,并将该用户视为已注销。
使用$_SESSION
意味着您不必担心生成自己的令牌,并为您提供内置超级全局的强大功能,以便于存储有关用户身份验证状态的信息。
就个人而言,我会允许多个会话对大多数网站的用户有效,因为通常没有充分的理由不这样做,但这显然取决于网站的性质。但是,如上所述存储当前活动会话ID是一种非常简单的方法。
答案 2 :(得分:1)
问题的前半部分很好地回答了如何检测多个用户,但如何对待它们我认为仍然需要一些工作。
首先,如果用户正确登录,请让他们进入,如果他们在其他地方登录,请不要阻止他们。如果您确实不希望用户有两个打开的会话,请注销旧会话,或者只是更新您要保存的会话ID,这样您就可以退出旧连接。您可以根据需要通知我,但我只会向您宣布无效的会话发送消息。如果您向用户发送消息,当您只处理用户切换计算机的情况而忘记退出旧会话时,该消息就会变得很烦人。
答案 3 :(得分:0)
以上提到的所有解决方案都可以正常工作,但是如果在每个页面访问中您正在调用数据库并检查会话令牌以查看天气,那么分配给用户的相同令牌将会终止您的响应时间。我建议的是在上述解决方案中使用缓存机制而不是数据库。将会话令牌存储到数据库中会为数据库添加额外的字段,这实际上并不是必需的。使用像memcache这样的开源缓存解决方案。
答案 4 :(得分:0)
你可以创建一个类似userLoginStatus的表,其中包含clockIn time& amp;时钟,时间, 当用户登录时,在clockIn中插入当前时间,此时将clockOut时间留空,只有当用户通过注销按钮时,才应更新, 所以你可以检查特定用户的当前状态,其中clockOut是空的,用户应该登录。因为它只在用户注销时更新。