如何避免 symfony 4 中的多个用户会话?

How to avoid multiple user sessions in symfony 4?

如何防止注册用户从多个设备访问网站?

我在 EventListener 中创建了一个函数 onSecurityInteractiveLogin

<?php


namespace App\EventListener;

use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;

class LoginListener
{

    public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
    {
        $user = $event->getAuthenticationToken()->getUser();
        $session = $event->getRequest()->getSession();
        //TODO validate if that user is logged in
    }


}

但如果用户登录到其他设备并关闭该会话,我无法获取,我找到了解决方案,但在 here 的 Symfony 2.3 中。

任何人都可以向我解释 Symfony 4 中的解决方案吗?

简而言之,你不能。

答案越长越复杂:您的网站无法知道哪些设备属于匿名用户;从服务器的角度来看,所有的请求看起来都像是来自随机的地方(它们确实是)。

但是,一旦用户登录,您就可以实施更多限制。诀窍在于如何发布身份验证令牌以及如何将它们与应用程序中的用户记录相关联。有很多方法可以给那只猫剥皮,但它们都涉及跟踪已授予用户帐户的身份验证次数。通常,身份验证请求会通过用户的 IP 和浏览器中的用户代理字符串进行跟踪,以帮助区分用户的登录信息。例如。当您登录 GMail 时,您可以查看所有访问过该帐户的登录信息——这可以帮助您识别欺诈性登录,但它也会显示您使用了多少设备(或浏览器)登录。