php - Symfony 3 TokenAuthenticator 结束 session

标签 php session nginx symfony

我正在使用 Symfony3、Nginx、PHP7 构建一个 Web 应用程序。 为了授权,我创建了一个扩展 AbstractGuardAuthenticator 的 TokenAuthenticator 类。我可以使用 token 进行身份验证并手动注销。

如果我不手动注销, session 似乎会永远持续下去。 我希望应用程序在浏览器关闭时使任何 session 无效。 如果是新的浏览器 session ,所有用户都应重新进行身份验证。

session 持续存在,即使我重新启动了 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

安全.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 /   /

如何在浏览器关闭时删除/销毁 session /cookie(PHPSESSID)?

必须有一个简单的技巧来做到这一点。

编辑:

在这个答案中得到了很好的解释,说明为什么在开发服务器上 session 大多永不过期 https://stackoverflow.com/a/1505596/1249820

最佳答案

通过在 php.ini 中设置 session.gc_probability = 1 解决了这个问题,默认值为 0。 用于清除 session 的 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`

关于php - Symfony 3 TokenAuthenticator 结束 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35872299/

相关文章:

php - CakePHP session 读取未设置的变量

c# - 在网络场场景中工作时,我可以使用什么作为通用 session ID?

django - 连接到本地 docker-compose 容器 Windows 10

php - PHP 的新 pecl_http 扩展(版本 2)

php - 如何在 php 中清除以前的输出和回显

php - 如何在 URL 中发送 PHPSESSID?

django - nginx+uwsgi+django响应超时怎么办?

php - 用于查找空气密度的 Javascript/PHP 库?

php - php将数据插入mysql数据库,显示错误

nginx - 如何更改 nginx 站点 url