Symfony2:记得我在重新打开浏览器时删除了cookie

时间:2013-12-18 09:09:24

标签: php symfony cookies

尽管有关堆栈溢出的所有其他问题,但我无法使用所有提供的信息解决问题 这就是为什么我决定创建一个新的
所以我在登录表单中实现了记住我的功能,其复选框看起来像这样:

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

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

cookie gets set correctly

通过整个浏览器会话,cookie仍然存在 但当我关闭浏览器并重新打开它时,cookie仍然在那里(还没有导航到我的localhost!)。

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

被删除

enter image description here

我不知道为什么在导航到网站时会删除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: ~

有关如何解决此问题的任何想法? 提前致谢

3 个答案:

答案 0 :(得分:7)

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

删除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玩游戏,看看你是否能解决问题!

祝你好运!

答案 1 :(得分:0)

我有同样的问题,但我的错:在 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。

答案 2 :(得分:-2)

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