2016-03-08 41 views
3

我正在用Symfony3,Nginx,PHP7構建一個Web應用程序。 對於授權,我創建了一個擴展AbstractGuardAuthenticator的TokenAuthenticator類。我可以使用令牌進行身份驗證並手動註銷。Symfony 3令牌驗證器結束會話

如果我不手動註銷會話似乎永遠持續下去。 我希望應用程序在瀏覽器關閉時使任何會話無效。 所有用戶應該重新進行身份驗證,如果它是新的瀏覽器會話。

會話持續存在,即使重啓了nginx,php fpm並清除了cmd行的緩存,我也沒有要求重新進行身份驗證。

TokenAuthenticator有這個方法

public function supportsRememberMe() 
{ 
    return false; 
} 

config.yml:

session:  
    handler_id: session.handler.native_file 
    save_path: "/var/lib/php/sessions/%kernel.environment%" 
    cookie_lifetime: 0 

security.yml:

main: 
    guard: 
     authenticators: 
      - app.token_authenticator 
    logout: 
     path: logout 
     target:/
     invalidate_session: true 

    anonymous: false 

的php.ini:

session.cookie_httponly On On 
session.cookie_lifetime 0 0 
session.cookie_path//

如何刪除/刪除會話/餅乾(PHPSESSID)當瀏覽器被關閉?

必須有一個簡單的技巧來做到這一點。

編輯:

在得到這個答案爲什麼開發服務器上的會話大多永不過期https://stackoverflow.com/a/1505596/1249820

回答

2

通過設置session.gc_probability合解決了這個一個很好的解釋= 1在php.ini中,默認爲0 的PHP的cronjob /etc/cron.d/php清除會話中運行,每30分鐘

09,39 * * * * root [-x /usr/lib/php/sessionclean] && /usr/lib/php/sessionclean 

請驗證是否在的cronjob已執行:

`grep CRON /var/log/syslog | tail`