Symfony 3 TokenAuthenticator结束会话

我正在用Symfony3,Nginx,PHP7构build一个Web应用程序。 对于授权,我创build了一个扩展AbstractGuardAuthenticator的TokenAuthenticator类。 我可以使用令牌进行身份validation并手动注销。

如果我不手动注销会话似乎永远持续下去。 我希望应用程序在浏览器closures时使任何会话无效。 所有用户都应该重新进行身份validation,如果这是一个新的浏览器会话。

会话持续存在,即使当我重新启动nginx,php fpm并从cmd行中清除caching时,我也不会被要求重新进行身份validation。

我的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 / / 

浏览器closures时,如何删除/销毁会话/ cookie(PHPSESSID)?

必须有一个简单的伎俩来做到这一点。

编辑:

在这个答案有一个很好的解释,为什么在开发服务器上的会话大多永远不会过期https://stackoverflow.com/a/1505596/1249820

通过在php.ini中设置session.gc_probability = 1来解决这个问题,默认值为 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`