2013-11-21 42 views
1

我想配置記住我的symfony功能使用他們的默認機制描述here;但不能使它工作。記得我cookies被刪除symfony2

Cookie名爲REMEMBERME創建,但設置爲刪除,其過期日期爲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() 
    { 
    } 
+0

我面臨同樣的問題。 REMEMBERME cookie在登錄時設置。現在,當會話過期並重新加載站點時,服務器將發送響應頭以刪除該cookie。但我不知道爲什麼?它應該只在註銷時將其刪除,但它也會在會話到期時進行。任何幫助都將非常感謝。 – adityap

回答

1

我在輸入標籤內添加了value屬性。刪除它後,它現在工作。 :)

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

我想這個複選框命名不正確。它應該將'name'屬性設置爲'_remember_me'以使魔法發生。你可以發佈表單模板的內容嗎?

+0

我不認爲這是問題所在。請閱讀我上面的評論。我覺得在symfony後端有一些問題。 – adityap