使用会话登录代码

时间:2010-06-02 21:31:18

标签: php

如果在一个会话中登录...如何阻止由同一用户ID和另一个会话登录密码...

4 个答案:

答案 0 :(得分:3)

您可以分为两部分来处理。首先是政策/配置。将sessionID上的cookie超时设置为15分钟。只要用户使用相同的浏览器,他们就可以打开任意数量的选项卡,甚至打开和关闭浏览器,他们仍然会登录.15分钟后,会话cookie将与sessionID一起丢失,如果他们最近没有访问过该页面,他们将需要重新进行身份验证。

第二部分是定义特定用户当前活动sessionID的内容。您可以将当前sessionID及其上次访问时间存储在用户的帐户行中。如果自上次访问后不到15分钟更新了该行中的访问时间,请拒绝使用该用户/密码组合对帐户进行身份验证。您可能还想抛出一个标记,以便当前登录的用户看到其他人正在尝试以其身份登录。

最后,您可能希望提供一种方法来消除谁是“真实”帐户所有者的歧义,以防他们的用户名/密码被泄露。如果某人因为他们的帐户正在使用而登录并被拒绝,他们可能希望对自己进行身份验证并将其他人踢出去。您可能不希望手动处理此问题,因此请为它们制作某种身份验证机制,而不要烦扰您。您可能希望然后记录违规者的IP地址,并可能阻止他们使用违规IP登录该帐户。 (例如,这样您就不会锁定所有AOL用户的所有帐户)

答案 1 :(得分:1)

如其他答案和评论中所述,将用户帐户限制为一个会话有点棘手。问题是用户通常(我的经验)不会注销。另一方面,PHP在破坏会话时也不会通知您,因此您无法执行任何任务。

如果你想坚持使用PHP内置会话,我会使用这样的方法:

  • 每当用户登录时,将会话ID插入用户表(如果已有另一个会话ID,则覆盖)
  • 在每个页面点击检查当前会话ID是否等于用户表中的会话ID(如果不是session_destroy()

这样,每当有人登录时,他的所有旧会话都会失效。因此,“丢失”会话没有任何问题。缺点是,它需要在每个页面加载上执行额外的查询。

答案 2 :(得分:0)

如果您想阻止某人进行双重登录,您必须使用提供全局上下文的内容,可能是存储会话的数据库,或APC使用apc_fetch / apc_store之类的内容。 每个页面都可以验证当前会话是否有效,每个帐户登录都会使同一帐户的其他会话无效。

答案 3 :(得分:-1)

嗯,有很多方法可以做到这一点......我最常用的是:

  

1。让@ users表一个字段,在登录时将收到会话ID   成功发生......

     

2. 注销时,请清除该字段...请注意,人们可能无法注销,因此   你必须不时检查一下   用户仍在线...

     

3. 登录尝试时,只需检查字段是否已清除......

这只是整体想法,但应该让你走上光明之路:)