gpt4 book ai didi

php - 如何在记住我登录 Symfony2 后获取 session ID?

转载 作者:可可西里 更新时间:2023-11-01 11:22:21 25 4
gpt4 key购买 nike

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

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

我正在使用 Redis session 处理程序( native PHP Redis session 模块)。

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

问题是我需要在我的 Controller 中使用 session ID(实际上它被传递到 View ,它被用作 AJAX 访问的外部服务的授权 key )。为了在 Controller 中获取 session ID,我使用 $this->get('session')->getId() 并且通常它工作得很好,除非用户第一次进入网站并且他使用记住我 token 自动登录。对于这一次请求, Controller 中$this->get('session')->getId()(或session_id())返回的session ID为空字符串。重新加载页面后,一切正常。

现在想到的唯一想法是根本不在 Controller 中使用 session ID,而是从 JavaScript 客户端的 cookie 中获取它,但这不是一个很好的解决方案。自动登录后如何在 Controller 内获取 session ID?我希望我说清楚了。

最佳答案

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

这是 Symfony 的问题:

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

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

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());
}
}

关于php - 如何在记住我登录 Symfony2 后获取 session ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19659605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com