2017-09-13 69 views
3

我在apache服务器2.4.16上使用PHP 5.5.38。在某段时间后(约25分钟),我会遇到这个会话丢失的问题。我发现这些参数在php.ini文件约25分钟后会话丢失

的session.gc_maxlifetime = 1440
session.gc_probability合= 10

但是这些代码已经达到设定为不同的值。代码看起来像这样

ini_set('session.gc_maxlifetime', 60*60*24*7); 
ini_set('session.use_cookies', 1); 
ini_set('session.gc_probability', 0); 

我确认他们返回旧值,这意味着它没有失败或什么。

我不知道在哪里可以找到失去会话的原因。任何想法或建议将不胜感激。

+0

你检查你的htaccess文件?你有什么喜欢'php_value session.gc_maxlifetime' – Thamaraiselvam

+0

是的,我也检查了htaccess文件,没有什么。 – Shaonline

回答

1

当您设置与ini_set()一个配置价值,它只是当前脚本执行过程中持续:脚本的执行过程中

配置选项将保持这个新的价值,并在脚本的结尾恢复。

而且,当有多个值session.gc_maxlifetime,垃圾收集器会用最低:

如果不同的脚本具有不同的session.gc_maxlifetime数值但是共享了同一个地方存储会话数据那么具有最小值的脚本将清除数据。

所以你需要做的是要么有ini_set()分配在每页面在您使用会话,或者是更好的选择,直接修改php.ini文件到您需要的值。

请注意,25分钟大概是1440秒(24分钟),所以它绝对使用php.ini的值。

+0

ini_set()赋值实际上用于每个页面。如果它在每个页面上都不应该保持这个新的价值? – Shaonline

+1

@Shaonline如果你有一个基于debian的系统,垃圾收集是通过一个每分钟大概发生一次的cronjob完成的。此脚本(以及类似的实用程序脚本)将使用默认的php.ini值运行。 ishegg是正确的,你应该在主php.ini文件中设置这个设置,而不是在用户域中的脚本。 – OptimusCrime

+0

@OptimusCrime说的一个(位)“hacky”解决方法是将'session.save_path'设置为另一个目录,以便cronjob无法通过'session_save_path()'获得它。这当然不是理想的。是否可以直接在ini文件中更改值? – ishegg