PHP不会导致会话超时

时间:2015-11-19 17:22:22

标签: php .htaccess session zend-framework

有几天我试图增加网站管理区域的会话超时。当工作人员被电话打断时,工作人员必须登录并经常丢失所有数据。

我无法将php.ini文件设置得更高,因为此网站有数千名用户,会话文件夹将成为massiv。

我使用.htaccess将会话时间设置为一天。使用phpinfo()检查它显示本地值是86400。 使用ini_get也会返回86400

但是会话文件夹中没有文件比25分钟更早。距标准php.ini

1440秒

我还可以做些什么来增加admin文件夹的会话超时?

1 个答案:

答案 0 :(得分:1)

目前尚不清楚您将哪些php配置修改为86400,但PHP会话与多个配置指令相关联,这些指令会影响会话的生命周期。

由于会话由两部分组成(生活在客户端的cookie,以及服务器端的会话文件),因此有两个主要值控制它们的生命周期

会话Cookie [客户端]

Cookie由session.cookie_lifetime指令控制,默认情况下设置为0,这意味着只要用户关闭浏览器就会过期。此值通常应大于或至少等于session_gc.maxlifetime值。

会话文件[服务器]

服务器上的会话文件由session.gc_maxlifetime指令控制,默认设置为1440 (24分钟)。这是服务器端会话在被PHP标记为垃圾回收之前可以保持非活动状态的时间。

还有许多其他变量影响服务器端会话的垃圾收集,但主要是会话生命周期和cookie生存期必须相等才能使会话有效地持续至少那么长时间。这两个指令都是秒数。

边缘案例

最后,您可能正在使用修补版本的PHP(如通常由基于Debian的发行版(如Ubuntu)提供的版本),它们将自己的垃圾收集例程放在他们的PHP包中。这可以由系统crontab控制,该系统执行自己的垃圾收集例程,可能会有效地改变库存PHP行为。

来自手册

  

注意:   如果不同的脚本具有不同的session.gc_maxlifetime值,但共享相同的位置来存储会话数据,则具有最小值的脚本将清除数据。在这种情况下,请将此指令与session.save_path一起使用。

这意味着如果您有多个会话驻留在同一目录中,且生命周期值不同,那么最小生命周期可能会触发垃圾收集器清理这些会话。这是因为gc不会根据其不同的配置来区分会话,而是基于哪个会话在特定存储路径上触发gc(然后,无论,所有超过TTL的文件都被清除)

因此,只需将您想要拥有不同生命周期的会话放在不同的目录中,方法是为它们提供与您通常希望持续较短时间的默认会话不同的session.save_path