记住我的cookie被删除symfony2

时间:2013-11-21 04:12:30

标签: php symfony cookies

我正在尝试使用默认机制配置记住我的symfony功能,如here所述;但无法使其发挥作用。

创建名为REMEMBERME的Cookie,但设置为已删除,其过期日期为1970.这就是为什么我想记住我的功能不起作用。但是,当我在security.yml中使用(always_remember_me:true)时,代码运行良好,但它不符合我的目的。使用(always_remember_me:true)即使用户未在UI中检查REMEMBER ME复选框,也会创建cookie。

非常感谢任何帮助

我使用的是2.3.7版本

这是我完整的security.yml文件:

security:
    firewalls:
        main:
            pattern:    ^/
            anonymous: ~
            remember_me:
                key:      "%secret%"
                lifetime: 31536000 # a year
                domain:   ~ 
                path: /
                remember_me_parameter: _remember_me
                #always_remember_me: true
            form_login:
                login_path:  _my_login
                check_path:  _my_login_check
                always_use_default_target_path: true
                default_target_path: /out/homepage
                remember_me:    true
            logout:
                path:   _my_logout
                target: _my_login

    access_control:
        - { path: ^/admin, roles: ROLE_ADMIN }
        - { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, roles: IS_AUTHENTICATED_REMEMBERED  }

    providers:
        chain_provider:
          chain:
            providers: [in_memory, user_db]

        in_memory:
            memory:
                users:
                    user:  { password: user, roles: 'ROLE_USER' }
                    admin: { password: admin, roles: ['ROLE_ADMIN', 'ROLE_USER'] }
        user_db:
          entity: {class: ProjectName\StoreBundle\Entity\User, property: username}

    encoders:
        ProjectName\StoreBundle\Entity\User: 
                algorithm: sha1
                iterations: 1
                encode_as_base64: false
        Symfony\Component\Security\Core\User\User: plaintext

LoginController.php

class LoginController extends Controller
{
    /**
     * @Route("/login", name="_my_login")
     * @Template()
     */
    public function loginAction()
    {
        $request = $this->getRequest();
        $session = $request->getSession();

        // get the login error if there is one
        if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
            $error = $request->attributes->get(
                SecurityContext::AUTHENTICATION_ERROR
            );
        } else {
            $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
            $session->remove(SecurityContext::AUTHENTICATION_ERROR);
        }

         return  array(
                // last username entered by the user
                'last_username' => $session->get(SecurityContext::LAST_USERNAME),
                'error'         => $error,
            );
    }

    /**
     * @Route("/login_check", name="_my_login_check")
     */
    public function loginCheckAction()
    {
    }

2 个答案:

答案 0 :(得分:1)

我在input标记中添加了value属性。删除后,它现在工作。 :)

<input type="checkbox" id="remember_me" name="_remember_me" checked /> Remember me

答案 1 :(得分:0)

我认为复选框名称不正确。它应该将'name'属性设置为'_remember_me'以使魔法发生。你可以发布表单模板的内容吗?