【问题标题】:Symfony 3 TokenAuthenticator end sessionSymfony 3 TokenAuthenticator 结束会话
【发布时间】:2016-06-22 16:32:13
【问题描述】:

我正在使用 Symfony3、Nginx、PHP7 构建一个 Web 应用程序。 对于授权,我创建了一个扩展 AbstractGuardAuthenticator 的 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 /   /

当浏览器关闭时如何删除/销毁会话/cookie(PHPSESSID)?

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

编辑:

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

【问题讨论】:

    标签: php session nginx symfony


    【解决方案1】:

    通过在 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`
    

    【讨论】:

      猜你喜欢
      • 2018-06-12
      • 1970-01-01
      • 2020-08-09
      • 1970-01-01
      • 2015-02-04
      • 2016-11-18
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多