2012-11-22 29 views
4

我们的应用防止重复登录使用Symfony的2.0MongoDB的FOSUserBundle用户管理。与FOSUserBundle

客户端希望阻止在其应用程序中同时使用同一用户名从不同设备登录。

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

问题是,我们无法将会话保存在数据库中,因为Mongo会话处理程序稍后在版本2.1中添加。

我们想出的唯一解决方案是迭代保存在文件系统中的会话文件,并检查用户的用户名是否保存在该文件中。如果这是真的,我们只是删除文件和其他地点的登录会话被终止。当然,我们必须检查我们是否也删除当前会话。

有没有人有更好的想法如何解决问题? 如果没有,我们应该知道有没有隐藏的陷阱?

+0

多重登录有问题吗? –

+0

是的,客户端想阻止应用程序用户之间共享用户名。 – matejv

+2

可能的重复:http://stackoverflow.com/questions/10615363 – Ross

回答

4

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

通过ajax,您可以每隔X秒钟对服务器进行一次调用,执行相同类型的检查,如果ajax请求返回错误匹配,则执行重定向以记录用户。 。

+4

好主意。会话ID也可以用来代替IP地址来实现此功能 –

+0

它就像一个魅力。使用Mike的建议,但使用SessID而不是IP。谢谢。 – matejv

+0

[这里是我的SO问题/答案,更详细地解决这个解决方案的链接](http://stackoverflow.com/questions/25368713/prevent-simultaneous-user-sessions-in-symfony2/25388011#25388011) – sjagr