session.gc_maxlifetime 是不是仍基于上次修改日期?

Posted

技术标签:

【中文标题】session.gc_maxlifetime 是不是仍基于上次修改日期?【英文标题】:Is session.gc_maxlifetime still based on last modified date?session.gc_maxlifetime 是否仍基于上次修改日期? 【发布时间】:2017-05-20 00:25:53 【问题描述】:

根据this 的回答,session.gc_maxlifetime 基于会话的最后修改日期(从 php 4.2.3 开始):

注意:如果您使用默认的基于文件的会话处理程序,您的文件系统必须跟踪访问时间 (atime)。 Windows FAT 不支持,因此如果您遇到 FAT 文件系统或任何其他时间跟踪不可用的文件系统,您将不得不想出另一种方法来处理垃圾收集您的会话。从 PHP 4.2.3 开始,它使用 mtime(修改日期)而不是 atime。因此,您不会遇到时间跟踪不可用的文件系统问题。

我在官方文档上找不到任何相关内容,注释似乎消失了,所以这仍然是真的吗?

【问题讨论】:

【参考方案1】:

正确答案是肯定的(PHP 5 - PHP 8),它基于上次修改时间。

如果php脚本读取会话变量,php运行时会更新修改时间。

c 源在这里(PHP 7.3 C 源代码):

【讨论】:

【参考方案2】:

不,session.gc_maxlifetime 按定义的时间间隔工作。

此值(默认为 1440 秒)定义未使用的 PHP 会话将保持活动状态的时间。例如:用户登录,浏览您的应用程序或网站,数小时,数天。没问题。只要他的点击之间的时间不超过1440秒。这是一个超时值。

PHP 的会话垃圾收集器以 session.gc_probability 除以 session.gc_divisor 定义的概率运行。默认情况下这是 1/100,这意味着以 100 分之一的概率检查上述超时值。

【讨论】:

那么,是根据上次访问时间还是上次修改时间?

以上是关于session.gc_maxlifetime 是不是仍基于上次修改日期?的主要内容,如果未能解决你的问题,请参考以下文章

session.gc_maxlifetime 和 session.cookie_lifetime 之间的问题

PHP如何增加session.gc_maxlifetime?更改 php.ini 不起作用

PHP如何严格控制session过期时间

session垃圾回收机制

php--session垃圾回收机制

php session垃圾回收机制