使用 Symfony 2.0 和 FOSUserBundle,我需要知道如何限制访问以使其唯一。
这就是我的意思:
- 用户 X 通过登录名/密码访问我的系统创建会话
- 由于该会话仍然有效(未关闭会话等),同一用户 X 尝试从不同的计算机或位置进行访问。
- 在这种情况下,我需要系统通过某种消息避免其第二次访问:“该用户具有来自另一台计算机的有效会话”。
那可能吗?
使用 Symfony 2.0 和 FOSUserBundle,我需要知道如何限制访问以使其唯一。
这就是我的意思:
那可能吗?
只有当您能找到一种安全的方法来了解用户会话何时被破坏或他已从另一台计算机注销时,它才是可能的并且是可信赖的。因为它可以在没有用户明确操作的情况下发生(即他关闭了浏览器并且会话超时),所以我不会依赖它。当然,您总是可以尝试找到一些解决方法(即谓词会话到期时间和跟踪用户注销),但它仍然不是 100% 安全的。考虑新访问将被拒绝的情况,因为会话仍然在另一个浏览器上打开而没有人在它前面。
另一方面,您可以使用Voters和Allow one session only at a time中的一些提示以另一种方式(当新用户登录时,其他用户注销) 。
如果我错了,请纠正我,但我认为最终没有办法做我想做的事情,因为 Chrome(我也认为是 FF)保存了确切的 cookie,并且能够恢复跳过所有 LoginHandler 方法的会话。
让我自己解释一下。
是的,我打算(实际上我做到了)实施您的答案和评论中描述的解决方案:
User
数据库的表和会话中嗯......到目前为止很好,因为它似乎解决了这个问题。
重要的事情来了:正如这里和这里所描述的,Chrome 没有正确删除会话 cookie。因此,当用户没有注销并关闭浏览器时,只要他或她返回 Chrome,会话就会自动恢复,而无需通过登录处理程序、登录方法或其他任何东西。
这导致“神奇的”日期时间密钥不能同时保存在数据库和会话中,因此,在一次只允许一个会话的轮子上放了一根棍子,原来的计划是什么。
对这个问题还有更多的了解吗??
我想哭 :(