2016-03-08 2 views
3

Я создаю веб-приложение с Symfony3, Nginx, PHP7. Для авторизации я создал класс TokenAuthenticator, который расширяет AbstractGuardAuthenticator. Я могу выполнить аутентификацию с помощью токена и выхода из системы вручную.Symfony 3 TokenAuthenticator конец сеанса

Если я не выхожу вручную, сеанс, похоже, длится вечно. Я хочу, чтобы приложение аннулировало любые сеансы при закрытии браузера. Все пользователи должны повторно аутентифицироваться, если это новый сеанс браузера.

Сессия сохраняется, и меня не просят повторно аутентифицировать, даже когда я перезапустил 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), когда браузер закрыт?

должен быть простой трюк, чтобы сделать это.

Edit:

Получил хорошее объяснение в этом ответе на то, почему на сервере Dev сессии главным образом никогда не истекает https://stackoverflow.com/a/1505596/1249820

ответ

2

решаемые, установив session.gc_probability = 1 в php.ini, то по умолчанию было 0. РНР cronjob /etc/cron.d/php очистить сессии проходят каждые 30 минут

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

Verfiy что cronjob выполнил:

`grep CRON /var/log/syslog | tail` 
Смежные вопросы