symfony2断开/注销一个用户(不是当前用户)

时间:2015-01-21 23:15:43

标签: php security symfony fosuserbundle

在我的应用程序中,我需要以编程方式断开用户连接。 知道它的id,不是当前用户,而是另一个用户。我正在使用FOSUserBundle,但我想这对任何提供商都有好处。

令牌和会话是相对于当前用户的,我想是存储在它的计算机上。

那么,我该怎么做?

此处有相关帖子,但回复与请求不符:FOSUserBundle/Symfony2: Force logout of a user given a user (not the currently logged in user)

2 个答案:

答案 0 :(得分:1)

只有在 NOT 使用本机php会话处理程序(默认情况下为symfony)时才有可能。在这种情况下,您不知道其他用户会话ID。

您可以这样做的方法是使用数据库作为会话存储 - symfony.com上有howto。一旦您将会话存储在数据库中,用户的会话就是从数据库中删除正确的行。

是的 - FosUserBundle在这里无关,它不是特定于此捆绑

答案 1 :(得分:1)

据我所知,每次加载页面时,会话中的用户都会与数据库中的相应用户进行比较。如果比较返回false,则用户被迫再次登录。

FOSUserBundle序列化要存储在会话中的一堆用户数据,包括enabled字段。这意味着如果您将用户enabled状态设置为false,那么在下一页加载会话enabled将不等于数据库enabled,这意味着用户不是不等于导致用户需要再次登录。

要在没有FOSUSerBundle的情况下执行此操作,您只需要在用户管理系统中包含某种enabled字段,然后检查序列化中每个页面上的加载(或isEqualTo中的{{1}} in the docs)然后您可以在下一页加载时将人员记录下来。