2013-11-20 34 views
1

工作會議壽命和記得我我想要的會話超時..即5分鐘。但我也想記住我的功能,超時8小時。如何使其在Symfony2中

所以我設置會話超時與此config.yml:

session: 
    cookie_lifetime: 300 

然後我設置在security.yml與此記得我超時:

firewalls: 
    main:    
     remember_me: 
      key: '%secret%' 
      lifetime: 28800 
      path:/
      domain: ~  

所以,如果我在5分鐘內繼續工作,然後註銷,一切都會正常進行。但是,如果我保持非活動狀態超過5分鐘(會話超時),然後我退出,我將自動通過記住我的Cookie進行身份驗證。因此,如果我想註銷,我必須在註銷鏈接中單擊兩次。

我應該怎麼做才能讓他們一起工作?

回答

2

嘿,這花了一些時間來追查。 :-p

快速回答:由於this提交的第92行,因此不會調用註銷處理程序(因此,REMEMBERME cookie不會被刪除),除非securityContext中存在令牌(即用戶已登錄)。

較長的回答:AbstractRememberMeServicescancelCookie方法處理刪除REMEMBERME令牌。 RememberMeFactory確保該抽象類的實現(通過涉及security.authentication.rememberme.services.*服務的一個令人費解的一些服務查找)與LogoutListener註冊。

LogoutListenerFirewall的聽衆之一)應該通過它的所有處理迭代(實現LogoutHandlerInterface),稱他們的logout方法。你可能會使用PersistentTokenBasedRememberMeServices,其業務ID爲security.authentication.rememberme.services.persistent,其logout方法調用上述cancelCookie方法,從而消除所謂的與rememberMe餅乾。

但由於我上面所解釋的,它絕不會爲未登錄誰(由於有過期的會話)的用戶。相反,logoutSuccessHandler將重定向您,並在以下請求中將其餘的REMEMBERME Cookie啓動。


我不知道這是否應該被認爲是一個錯誤(意外的提交副作用)與否。也許我們中的一個應該submit it,看看開發者對它做了什麼?

:-)