4

我们的应用程序使用Symfony 2.0和带有FOSUserBundle的MongoDB进行用户管理。

客户希望防止在其应用程序中同时从不同设备使用相同的用户名登录。

我们的想法是在成功登录时使同一用户的所有其他会话无效/删除。

问题是,我们无法在 DB 中保存会话,因为 Mongo 会话处理程序是在 2.1 版中添加的。

我们提出的唯一解决方案是遍历保存在文件系统中的会话文件,并检查用户的用户名是否保存在该文件中。如果这是真的,我们只需删除该文件并终止其他位置的登录会话。当然,我们必须检查我们是否也没有删除当前会话。

有谁知道如何解决这个问题?如果没有,是否有我们应该知道的隐藏陷阱?

4

1 回答 1

4

您可以在登录时存储当前用户 IP 的用户实体中添加一个 IP 地址列。在每次页面加载时(通过事件监听器),您可以检查存储在数据库中的 IP 与请求页面的人的 IP。如果数据库中的 IP 与当前用户的 IP 不匹配(有人从另一个位置登录),请将其注销。

更进一步,通过 ajax,您可以每 X 秒调用一次执行相同类型检查的服务器,并在 ajax 请求返回错误匹配时执行重定向以注销用户。

于 2012-11-28T00:04:42.393 回答