PHP 不增加会话超时
PHP not incresing session timeout
几天来,我一直在尝试增加站点管理区域的会话超时。当工作人员被 phone 电话打断时,他们必须登录并且经常丢失所有数据。
我无法将 php.ini 文件设置得更高,因为该站点有成千上万的用户,会话文件夹会变得很大。
我已经使用 .htaccess 将会话时间设置为一天。使用 phpinfo() 检查它显示本地值为 86400。
使用 ini_get 也 returns 86400
但是会话文件夹中没有文件早于 25 分钟。距标准 1440 秒 php.ini
我还能做些什么来增加管理文件夹的会话超时?
不清楚您将哪些 php 配置修改为 86400
,但是 PHP 会话绑定到多个配置指令,这些配置指令会影响会话的生命周期。
由于会话由两部分组成(存在于客户端的 cookie,以及存在于服务器端的会话文件)有两个主要值控制他们每个人的一生。
会话 Cookie [客户端]
cookie 由 session.cookie_lifetime
指令控制,默认设置为 0
,这意味着它会在用户关闭浏览器后立即过期。此值通常应大于或至少等于 session_gc.maxlifetime
值。
会话文件[服务器]
服务器上的会话文件由session.gc_maxlifetime
指令控制,默认设置为1440
seconds(即24分钟) .这是服务器端会话在被 PHP.
标记为垃圾收集之前可以保持非活动状态的时间量
还有许多其他变量会影响服务器端会话的垃圾收集,但主要是会话生命周期和 cookie 生命周期必须相等,以便会话有效地持续至少那么长时间。两个指令都以秒为单位。
边缘案例
最后,您使用 PHP 的补丁版本的可能性很小(就像那些通常由基于 Debian 的发行版提供的版本,例如 Ubuntu),它们会放置自己的垃圾他们的 PHP 包中的收集例程。这可以通过执行自己的垃圾收集例程的系统 crontab 来控制,并且可能会意外地有效地更改库存 PHP 行为。
来自手册
Note:
If different scripts have different values of session.gc_maxlifetime
but share the same place for storing the session data then the script with the minimum value will be cleaning the data. In this case, use this directive together with session.save_path
.
这意味着如果您有多个会话驻留在同一目录中,具有不同的生命周期值,那么最小的生命周期可能会触发垃圾收集器清理这些会话。这是因为gc不会根据不同的配置来区分session,而是根据哪个session在特定的存储路径上触发gc(然后所有超过TTL的文件都会被清理掉).
因此,只需将那些您希望具有不同生命周期的会话放在不同的目录中,方法是为它们提供与您通常希望持续更短时间的默认会话不同的session.save_path
。
几天来,我一直在尝试增加站点管理区域的会话超时。当工作人员被 phone 电话打断时,他们必须登录并且经常丢失所有数据。
我无法将 php.ini 文件设置得更高,因为该站点有成千上万的用户,会话文件夹会变得很大。
我已经使用 .htaccess 将会话时间设置为一天。使用 phpinfo() 检查它显示本地值为 86400。 使用 ini_get 也 returns 86400
但是会话文件夹中没有文件早于 25 分钟。距标准 1440 秒 php.ini
我还能做些什么来增加管理文件夹的会话超时?
不清楚您将哪些 php 配置修改为 86400
,但是 PHP 会话绑定到多个配置指令,这些配置指令会影响会话的生命周期。
由于会话由两部分组成(存在于客户端的 cookie,以及存在于服务器端的会话文件)有两个主要值控制他们每个人的一生。
会话 Cookie [客户端]
cookie 由 session.cookie_lifetime
指令控制,默认设置为 0
,这意味着它会在用户关闭浏览器后立即过期。此值通常应大于或至少等于 session_gc.maxlifetime
值。
会话文件[服务器]
服务器上的会话文件由session.gc_maxlifetime
指令控制,默认设置为1440
seconds(即24分钟) .这是服务器端会话在被 PHP.
还有许多其他变量会影响服务器端会话的垃圾收集,但主要是会话生命周期和 cookie 生命周期必须相等,以便会话有效地持续至少那么长时间。两个指令都以秒为单位。
边缘案例
最后,您使用 PHP 的补丁版本的可能性很小(就像那些通常由基于 Debian 的发行版提供的版本,例如 Ubuntu),它们会放置自己的垃圾他们的 PHP 包中的收集例程。这可以通过执行自己的垃圾收集例程的系统 crontab 来控制,并且可能会意外地有效地更改库存 PHP 行为。
来自手册
Note: If different scripts have different values of
session.gc_maxlifetime
but share the same place for storing the session data then the script with the minimum value will be cleaning the data. In this case, use this directive together withsession.save_path
.
这意味着如果您有多个会话驻留在同一目录中,具有不同的生命周期值,那么最小的生命周期可能会触发垃圾收集器清理这些会话。这是因为gc不会根据不同的配置来区分session,而是根据哪个session在特定的存储路径上触发gc(然后所有超过TTL的文件都会被清理掉).
因此,只需将那些您希望具有不同生命周期的会话放在不同的目录中,方法是为它们提供与您通常希望持续更短时间的默认会话不同的session.save_path
。