2012-09-26 66 views
1

我使用標準remember_me symfony功能,但它會在每個時間段過期,在config中設置。 例如我有lifetime設置爲1800.無論我做什麼,它會在上次登錄後0.5小時後將我註銷。而且我希望它在閒置0.5小時後才能註銷。如何在Symfony2中的每個請求上延長remember_me Cookie?

每個請求應該延長記住我的cookie。

這可以用只是配置完成,或者我應該混淆內核事件和手動破解?

回答

4

確實有一種方法只能通過配置設置來完成,但只能在Symfony 2.1中進行。要走的路是使用PHP中集成的會話的垃圾回收。在這裏你如何實現它。

在你config.yml文件中,設置以下變量:

framework: 
    session: 
    cookie_lifetime: 86400 # One day, cookie lifetime 
    gc_maxlifetime: 1800 # 30 minutes, session lifetime 
    gc_probability: 5 
    gc_divisor: 100 

利用該配置,發送到瀏覽器cookie的有效期爲一整天。但會議將持續30分鐘。由於會話保存在每個請求上,所以在每次請求後,生命週期將「重新啓動」。所以,每次請求會話都會延長。

然後,來垃圾收集部分。這可能是「有問題的」,取決於你想要的精確程度。屬性gc_probabilitygc_divisor控制垃圾收集的運行頻率。這些數字表示在每次會話初始化時,GC的運行概率爲5%(5/100,gc_probability/gc_divisor)。

這意味着當GC運行時,它將刪除過期的會話。但是,由於這是一個概率性特徵,因此您無法完全控制它。有些會話仍然可以在您指定的生命週期後訪問,因爲GC尚未運行。

如果這對您而言是個問題,那麼您需要每個請求都有一個偵聽器,並檢查會話是否仍然有效。如果由於沒有會話過期事件而在會話過期時想要向用戶顯示消息,則還需要執行此操作。

不要忘記,我的回答僅在Symfony 2.1中有效。在2.0上,您還需要一個請求偵聽器來驗證會話生存期值。

這裏是一些有關會話連接空閒時間:

  1. 上介紹永葆會議的PR鏈接:會話PR-2171
  2. 文件:關於會議的GC here
  3. PHP網站:here

希望這可以幫助你。

Regards, Matt

相關問題