我使用標準remember_me
symfony功能,但它會在每個時間段過期,在config中設置。 例如我有lifetime
設置爲1800.無論我做什麼,它會在上次登錄後0.5小時後將我註銷。而且我希望它在閒置0.5小時後才能註銷。如何在Symfony2中的每個請求上延長remember_me Cookie?
每個請求應該延長記住我的cookie。
這可以用只是配置完成,或者我應該混淆內核事件和手動破解?
我使用標準remember_me
symfony功能,但它會在每個時間段過期,在config中設置。 例如我有lifetime
設置爲1800.無論我做什麼,它會在上次登錄後0.5小時後將我註銷。而且我希望它在閒置0.5小時後才能註銷。如何在Symfony2中的每個請求上延長remember_me Cookie?
每個請求應該延長記住我的cookie。
這可以用只是配置完成,或者我應該混淆內核事件和手動破解?
確實有一種方法只能通過配置設置來完成,但只能在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_probability
和gc_divisor
控制垃圾收集的運行頻率。這些數字表示在每次會話初始化時,GC的運行概率爲5%(5/100,gc_probability
/gc_divisor
)。
這意味着當GC運行時,它將刪除過期的會話。但是,由於這是一個概率性特徵,因此您無法完全控制它。有些會話仍然可以在您指定的生命週期後訪問,因爲GC尚未運行。
如果這對您而言是個問題,那麼您需要每個請求都有一個偵聽器,並檢查會話是否仍然有效。如果由於沒有會話過期事件而在會話過期時想要向用戶顯示消息,則還需要執行此操作。
不要忘記,我的回答僅在Symfony 2.1中有效。在2.0上,您還需要一個請求偵聽器來驗證會話生存期值。
這裏是一些有關會話連接空閒時間:
希望這可以幫助你。
Regards, Matt