繁体   English   中英

记住我登录Symfony2后如何获取会话ID?

[英]How to obtain session ID after remember me login in Symfony2?

我在Symfony 2.3中使用“记住我”自动登录,这是非常标准的配置:

security:
    firewalls:
    secured_auth:
        (...)
        remember_me:
            key: RememberMeKey
            lifetime: 5184000
            path: /
            domain: ~

我正在使用Redis会话处理程序(本地PHP Redis会话模块)。

它按预期工作,在这里没有问题。 长时间后首次进入该网站后,用户将自动登录。

问题是我需要在控制器中使用会话ID(实际上,它已传递到视图中,在该视图中它用作AJAX访问的外部服务的身份验证密钥)。 为了在控制器内获取会话ID,我使用$this->get('session')->getId() ,通常它可以正常工作,除非用户第一次进入站点,并且使用“记住我”令牌自动登录。 对于此一个请求,控制器中$this->get('session')->getId() (或session_id() )返回的会话ID为空字符串。 重新加载页面后,一切都会按预期进行。

现在想到的唯一想法是根本不使用控制器中的会话ID,而是从JavaScript客户端的Cookie中获取会话ID,但这不是一个很好的解决方案。 自动登录后如何在控制器内部获取会话ID? 我希望我能使自己清楚。

我会为子孙后代回答我自己的问题...

Symfony有一个问题:

https://github.com/symfony/symfony/issues/9255

肮脏的解决方法是在身份验证处理程序中以自动登录手动启动会话

public function onAuthenticationInteractiveLogin(InteractiveLoginEvent $e) {
    $token = $e->getAuthenticationToken();
    $request = $e->getRequest();

    if($token instanceof Token\RememberMeToken) {
        $url = $request->getRequestUri();

        $this->session->start();
        $this->userProvider->refreshUser($token->getUser());
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM