Php 带有会话的登录代码

Php 带有会话的登录代码,php,Php,如果在一个会话中登录…如何阻止使用相同的用户名和密码从另一个会话中登录…?那么,有很多方法可以做到这一点。。。我用得最多的是: 1。让@users表中的一个字段在登录时接收会话id 成功发生 2.注销时,清除该字段。。。注意,人们可能不会注销,因此 您必须不时检查 用户仍然在线 3.尝试登录时,只需检查字段是否已清除 这只是总体思路,但应该让您走上光明之路:)如果您想阻止某人双重登录,您必须使用提供全局上下文的东西,可能是存储会话的数据库,或者类似APC使用APC_fetch/APC_store

如果在一个会话中登录…如何阻止使用相同的用户名和密码从另一个会话中登录…?

那么,有很多方法可以做到这一点。。。我用得最多的是:

1。让@users表中的一个字段在登录时接收会话id 成功发生

2.注销时,清除该字段。。。注意,人们可能不会注销,因此 您必须不时检查 用户仍然在线

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


这只是总体思路,但应该让您走上光明之路:)

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

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

如果您想坚持使用PHP内置会话,我会使用如下方法:

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

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

您可以分两部分来处理这个问题。第一个是策略/配置。将sessionID上的cookie超时设置为15分钟左右。只要用户使用相同的浏览器,他们就可以打开任意多个选项卡,甚至可以打开和关闭浏览器,并且他们仍将登录。15分钟后,会话cookie将与sessionID一起删除,如果他们最近没有访问该页面,则需要重新验证

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


最后,如果用户名/密码被泄露,您可能需要提供一种方法来消除“真正”帐户所有者的歧义。如果有人登录并被拒绝,因为他们的帐户正在使用中,他们可能想验证自己的身份,并将其他人踢出。您可能不想手动处理此问题,因此请为他们创建某种身份验证机制,以便他们在不打扰您的情况下完成此操作。然后,您可能希望记录违规者的IP地址,并可能阻止他们使用违规IP登录该帐户。(例如,这样你就不会锁定所有AOL用户的所有帐户)

如果用户关闭浏览器并失去会话,会发生什么?还是他们的电脑崩溃了?或者…会话具有唯一标识符,理论上,使用用户名/密码的两个不同会话应该没有问题。+1这是合法的question@stacker,我从没说过这不是一个合理的问题。但是,当您可能将用户锁定在自己的帐户之外时,您需要考虑一些事情。@Matthew Scharley,很抱歉,当我看到问题被否决时,这与您无关,只与问题本身有关。如果我在未注销的情况下关闭帐户..则我无法使用用户id和密码再次登录。。。你能在这桥上帮我吗。。。谢谢…我们不能像雅虎邮件那样做。。。。。如果可以…那么请发送一些代码..谢谢如果我没有注销就关闭了..那么我就不能用用户id和密码再次登录。。。你能帮我在这个桥上,并发送一些脚本plz。。。谢谢