【问题标题】:Delete Session value from second computer从第二台计算机删除会话值
【发布时间】:2012-10-18 02:23:04
【问题描述】:

我创建了一个登录到我的网站。用户登录后,我将用户 ID 和操作(=登录)存储在数据库中,并且 $_SESSION['loggedin']==TRUE。 (如果注销数据库中的操作将注销并且会话将被破坏) 如果有人想在第二台计算机上使用相同的用户名再次登录,我将不允许这样做,因为数据库中的最后一行是“登录”,当然用户 ID 也会相同。所以我不想允许来自一个用户名的多个连接。 现在在这里我想放一个链接:“断开其他连接”。

例如:我在学校登录但忘记注销,然后我尝试在家登录但它会失败,因为我在另一个地方登录(会话处于活动状态)所以如果我点击“断开其他连接" 链接 我想删除学校里的会话值(更改数据库中的操作值是不够的,因为如果我将其更改为注销会话仍然存在并且多个连接将可用)

如何防止一个用户名的多重连接?

【问题讨论】:

    标签: php session


    【解决方案1】:

    听起来你需要做的是保存一些东西来识别个人连接,比如说一个你每次登录帐户时都会增加一个的数字。

    例如,假设您使用 ID 为 1 的用户登录,这是您第五次登录,因此您将其保存到数据库: 用户 ID = 1,状态 =“登录”,连接 ID = 5 到您保存的会话: $_SESSION['loggedin']=TRUE 和 $_SESSION['ConnectionID']=5

    当您下次登录时,检查该帐户是否存在尚未注销的连接,如果是这种情况,您可以更新现有行以将状态设置为已注销,或者如果您想要log 时间创建一个状态为已注销的新条目 (UserID=1, State="Logged Out", ConnectionID=5),当然您还为新连接插入一行,连接 6。

    之后,您所需要的只是在您的网站上运行代码,可能在每次加载页面时检查数据库中是否有与您保存在 $_SESSION 中的 ConnectionID 相同的行和如果他们将操作设置为已注销,如果是这种情况,您将销毁会话,该会话将注销先前的连接。

    希望这能让您很好地了解如何做到这一点。我相信还有其他选择。

    如果您只关心一个帐户只从一个地方登录,并且您对他们注销时的登录不感兴趣,您可以将 UserID 和 ConnectionID 保存到数据库中,然后检查 ConnectionID 是否数据库中的与Session中的相同,如果不是,则终止该会话。

    【讨论】:

    • 哇,这么久......我会做并测试它,这对我来说需要更多时间。但我每天只能处理几个小时,所以也许 2 天后我会回信
    【解决方案2】:

    唯一不太可靠的方法是检查 IP 地址,当用户位于 NAT 网关(例如蜂窝数据连接、家庭路由器等)后面时,这种方法会非常失败。如果用户再次通过登录序列并且之前打开的会话正在进行,则最好的选择是简单地删除任何现有会话。类似于

    登录.php:

    <?
    
    check_password_stuff();
    
    if (user_is_already_logged_in()) {
       delete_login();
    }
    do_login_stuff();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-07
      • 2012-08-30
      • 2016-09-10
      相关资源
      最近更新 更多