首页 > 解决方案 > 如何避免 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
    }


}

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

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

标签: phpauthenticationsymfony4event-listener

解决方案


简短的回答是你不能。

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

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


推荐阅读