我们的应用程序使用 Symfony 2.0 和 MongoDB 与 FOSUserBundle 进行用户管理。
客户希望阻止在其应用中同时使用来自其他设备的相同用户名登录。
我们的想法是在成功登录时为同一用户无效/删除所有其他会话。
问题是,我们无法在DB中保存会话,因为稍后在版本2.1中添加了Mongo会话处理程序。
我们提出的唯一解决方案是迭代保存在文件系统中的会话文件,并检查用户的用户名是否保存在该文件中。如果是这样,我们只是删除文件,其他位置的登录会话终止。当然,我们必须检查我们是否也不删除当前会话。
有没有人更清楚如何解决问题? 如果没有,是否有任何我们应该知道的隐藏陷阱?
答案 0 :(得分:4)
您可以将IP地址列添加到用户实体,该用户实体在登录时存储当前用户的IP。在每个页面加载(通过事件监听器),您可以检查存储在DB中的IP与请求页面的人的IP。如果数据库中的IP与当前用户的IP(从其他位置登录的某个人)不匹配,请将其注销。
为了更进一步,通过ajax,您可以每隔X秒调用一次执行相同类型检查的服务器,并在ajax请求返回错误匹配时执行重定向以将用户注销。