Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php FOSUserBundle-唯一会话访问_Php_Security_Symfony_Fosuserbundle - Fatal编程技术网

Php FOSUserBundle-唯一会话访问

Php FOSUserBundle-唯一会话访问,php,security,symfony,fosuserbundle,Php,Security,Symfony,Fosuserbundle,使用Symfony 2.0和FOSUserBundle,我需要知道如何限制访问以使其唯一 这就是我的意思: 用户X通过登录/密码访问我的系统创建会话 在该会话仍然有效(未关闭会话等)的情况下,同一用户X尝试从不同的计算机或位置进行访问 在这种情况下,我需要系统通过某种消息避免第二次访问:“该用户拥有来自另一台计算机的有效会话” 有可能吗?只有当您能够找到一种安全的方法来知道用户会话何时被破坏或他何时从另一台计算机注销时,才有可能做到这一点,而且是可信的。由于它可以在没有用户明确操作的情况下发生(

使用Symfony 2.0和FOSUserBundle,我需要知道如何限制访问以使其唯一

这就是我的意思:

  • 用户X通过登录/密码访问我的系统创建会话
  • 在该会话仍然有效(未关闭会话等)的情况下,同一用户X尝试从不同的计算机或位置进行访问
  • 在这种情况下,我需要系统通过某种消息避免第二次访问:“该用户拥有来自另一台计算机的有效会话”

  • 有可能吗?

    只有当您能够找到一种安全的方法来知道用户会话何时被破坏或他何时从另一台计算机注销时,才有可能做到这一点,而且是可信的。由于它可以在没有用户明确操作的情况下发生(例如,他关闭了浏览器,会话超时),因此我不会依赖它。当然,您总是可以尝试找到一些解决方法(即断言会话过期时间并跟踪用户注销),但它仍然不是100%安全的。考虑以下情况:新的访问将被拒绝,因为会话仍在另一个浏览器上打开,前面没有人


    另一方面,您可以使用和中的一些提示以另一种方式(当新用户登录时,另一个用户注销时)执行此操作。

    只有当您能够找到一种安全的方式来知道用户会话何时被破坏或他已从另一台计算机注销时,才有可能做到这一点。由于它可以在没有用户明确操作的情况下发生(例如,他关闭了浏览器,会话超时),因此我不会依赖它。当然,您总是可以尝试找到一些解决方法(即断言会话过期时间并跟踪用户注销),但它仍然不是100%安全的。考虑以下情况:新的访问将被拒绝,因为会话仍在另一个浏览器上打开,前面没有人


    另一方面,你也可以用另一种方式(当新用户登录时,另一个用户注销)和中的一些提示来完成。如果我错了,请纠正我,但我认为自从Chrome(我也认为是FF)以来,我终于没有办法完成我的任务了保存准确的cookie,并能够通过跳过所有LoginHandler方法恢复会话

    让我解释一下

    是的,我准备(实际上我已经)实施您的回答和评论中描述的解决方案:

  • 用户X使用Safari登录/密码进入网站(例如)
  • 登录日期时间存储在数据库的表
    User
    和会话中
  • 在不注销的情况下,同一用户X会打开不同的浏览器(例如,Chrome)
  • 新的登录日期时间在数据库和Firefox会话中更新
  • 用户返回Safari并尝试刷新页面
  • 他得到一个异常,因为日期时间与会话中存储的日期时间不一致
  • 嗯。。。到目前为止很好,因为它似乎解决了问题

    这里有一个大问题:正如所描述的,Chrome没有正确删除会话cookie。因此,当用户不注销并关闭浏览器时,只要他或她返回到Chrome,会话就会自动恢复,而无需通过登录处理程序、登录方法或任何其他方法

    这导致“神奇的”datetime键不能同时保存在数据库和会话中,因此,只能让一个会话作为一个时间,这是最初的计划

    关于这个问题有更多的线索吗


    我想哭:(

    如果我错了,请纠正我,但我认为最终没有办法做我想做的事情,因为Chrome(我也认为FF)保存了准确的cookie,并且能够通过跳过所有LoginHandler方法来恢复会话

    让我解释一下

    是的,我准备(实际上我已经)实施您的回答和评论中描述的解决方案:

  • 用户X使用Safari登录/密码进入网站(例如)
  • 登录日期时间存储在数据库的表
    User
    和会话中
  • 在不注销的情况下,同一用户X会打开不同的浏览器(例如,Chrome)
  • 新的登录日期时间在数据库和Firefox会话中更新
  • 用户返回Safari并尝试刷新页面
  • 他得到一个异常,因为日期时间与会话中存储的日期时间不一致
  • 嗯……到目前为止还不错,因为它似乎解决了问题

    这里有一个大问题:如上所述,Chrome没有正确删除会话cookie。因此,当用户不注销并关闭浏览器时,只要他或她返回Chrome,会话就会自动恢复,而无需通过登录处理程序、登录方法或任何其他方法

    这导致“神奇的”datetime键不能同时保存在数据库和会话中,因此,只能让一个会话作为一个时间,这是最初的计划

    关于这个问题有更多的线索吗


    我想哭:(

    非常感谢。我想我会得到第二个选项。你怎么看:使用上次登录的日期时间。FOSUserBundle会自动将数据保存到数据库中。当用户登录时,保存完整的日期时间(秒精确)在会话中。当发出任何请求时,检查两个位置(会话和用户表)的信息是否一致。否则,说再见并销毁会话。方法很好,不是吗?非常感谢。我想我会得到第二个选项。您对此有何看法:使用上次登录的日期时间。FOSUserBundle会自动将该数据保存在数据库中。当用户登录时,保存完整的日期时间(精确到秒)在会话中。当发出任何请求时,检查信息在两个位置(会话和用户表)是否一致。否则,说再见并销毁会话。很好的方法,不是吗?正如我所说