【问题标题】:Symfony2 : remember me cookie gets deleted when reopening the browserSymfony2:记住我 cookie 在重新打开浏览器时被删除
【发布时间】:2014-01-06 08:57:25
【问题描述】:

尽管有关于堆栈溢出的所有其他问题,但我无法使用提供的所有信息解决问题。
这就是为什么我决定创建一个新的。

所以我在我的登录表单中实现了记住我的功能,它带有一个看起来像这样的复选框:

<input type="checkbox" id="form_saveCredentials" name="form[saveCredentials]">

登录时一切正常,cookie 设置正确

在整个浏览器会话期间,cookie 保持活动状态。
但是当我关闭浏览器并重新打开它时,cookie 仍然存在(还没有导航到我的本地主机!)。

当我在 localhost 上导航到我的网站时,cookie 会根据响应标头被删除

我不知道为什么在导航到网站时 cookie 会被删除。

也许问题在于 remember_me 功能的 securtiy.yml 设置

firewalls:
    somefirewall:
        form_login:
            remember_me: true
remember_me:
        key: %secret%
        lifetime: 31536000
        remember_me_parameter: 'form[saveCredentials]'
        path: /
        domain: ~

关于如何解决这个问题的任何想法? 提前致谢

【问题讨论】:

  • 我也发现了错误,你找到解决办法了吗?
  • 我没有为我目前正在进行的项目找到解决方案。虽然当我在一个新项目中使用记住我的功能时问题消失了。在那个项目中,我扩展了 fosuserbundle 而不是覆盖它。我想这解决了它,但不确定。

标签: php symfony cookies


【解决方案1】:

我最近遇到了这个问题,这是我找到的解决方案:

cookie 被删除的原因是 cookie 包含的用户信息与 Symfony 知道的任何内容都不匹配。它无法根据 cookie 登录用户,所以它只是将其删除。我的问题是我的 UserProvider 类中的字符串不正确。具体方法为supportsClass。当它实际上应该返回“AppBundle\Entity\User”时,它返回了'AppBundle\Security\User'。这导致 Symfony 无法根据 cookie 中的信息找到任何用户,然后它只会删除 cookie 并继续前进。

如果您进入以下文件,您可以进行更多故障排除:vendor/symfony/symfony/src/Symfony/Component/Security/Http/RememberMe/TokenBasedRememberMeServices.php。在processAutoLoginCookie 中玩转,看看你是否想不通!

祝你好运!

【讨论】:

  • 这个答案应该被接受。我遇到了同样的问题,但原因不完全相同,但涉及到相同的方法(TokenBasedRememberMeServices::processAutoLoginCookie)。就我而言,我使用电子邮件而不是用户名来验证用户身份。即使您指定默认提供程序应使用除username 之外的其他字段,记住我服务仍会将用户名存储到 cookie 中。您必须完全按照此处描述的方式编写自己的用户提供程序:symfony.com/doc/current/cookbook/security/…
【解决方案2】:

我遇到了同样的问题,但这是我的错:在 LoginFormAuthenticator::onAuthenticationSuccess() 中我没有返回 RedirectResponse

    public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
    if ($targetPath = $this->getTargetPath($request->getSession(), $providerKey)) {
        return new RedirectResponse($targetPath);
    }

    // my error : new RedirectResponse($this->urlGenerator->generate('my_route_to_page'));

    return  new RedirectResponse($this->urlGenerator->generate('my_route_to_page'));
    
    //throw new \Exception('TODO: provide a valid redirect inside '.__FILE__);
}

更改后,我可以使用用户名或电子邮件登录,当我再次重新打开时,浏览器会记住 cookie。

【讨论】:

    【解决方案3】:

    如果您的用户名是有效的电子邮件但不等于电子邮件,则可能会出现此问题。删除用户名中的任何 @。

    【讨论】:

      猜你喜欢
      • 2013-12-05
      • 2011-09-20
      • 2020-05-24
      • 2015-04-11
      • 2015-06-13
      • 2016-06-02
      • 2018-02-25
      • 2013-07-27
      • 2012-12-02
      相关资源
      最近更新 更多