2011-03-08 122 views
10

我想增加我的php会话时间至6小时。增加php会话时间

这里是增加会话时间代码:

ini_set('session.gc_maxlifetime', 60 * 60 * 6); // 6 Hours 

然而,似乎只有1个小时的会话时间。

任何建议,非常感谢。

此外,如何测试此功能,而无需等待6个小时以查看会话是否超时。

+0

是'ini_set'允许你的系统?你在'session_start()'之前调用它吗? – Czechnology 2011-03-08 20:52:05

+0

当你在'ini_set()'之后的同一页上执行'phpinfo()'时,'session.gc_maxlifetime'的条目是什么意思? – drudge 2011-03-08 20:54:33

+0

我想将会话超时创建为6小时,但我的浏览器在1/2小时内超时。我在PLESK服务器上。 我更新的.htaccess有设置: php_value的session.gc_maxlifetime 21600 php_value session.cache_expire 21600 php_value session.cookie_lifetime 21600 下面是相关的phpinfo: 的session.gc_maxlifetime \t本地= 21600 \t主= 1440 session.cache_expire \t local = 21600 \t master = 180 session.gc_maxlifetime \t local = 21600 \t master = 1440 – Ken 2011-03-10 19:19:15

回答

-14

使用本

ini_set('session.gc_maxlifetime', 6 * 60 * 60); // 6 Hours instead to this 
ini_set('session.gc_maxlifetime', 60 * 60 * 6); // 1 Hours 
ini_set('session.gc_maxlifetime', [hours] * [minutes] * [seconds]); 
+6

这根本不正确。乘法的顺序无关紧要。 – FoolishSeth 2012-10-27 08:34:43

+0

这就是我见过的最差的答案;) – misantronic 2017-02-09 18:29:45

-1

尝试以下各项

  • 避免空间

的ini_set( '的session.gc_maxlifetime',60 * 60 * 6);

或者

  • 只需输入值代入秒钟...

的ini_set( '的session.gc_maxlifetime',21600);

+1

空格不重要,也不需要手动将值相乘。为什么这个问题似乎吸引了这样的反应? – Leng 2013-11-13 23:24:31

0

如果存在使用相同session.save_path的另一个脚本(例如,其他虚拟主机),则通过ini_set增加session.gc_maxlifetime可能不起作用。其他脚本由它自己的生命周期中删除所有脚本的会议:

注:
如果不同的脚本具有不同的session.gc_maxlifetime数值但是共享了同一个地方存储会话数据,则该脚本最小值将清理数据。在这种情况下,请将此指令与session.save_path一起使用。

来源:http://php.net/manual/en/session.configuration.php#ini.session.gc-maxlifetime

另外,请务必在session_start前更改设置()。如果启用了session.auto_start,则在使用ini_set时会晚。

4

场景

你运行Debian Linux或Ubuntu Linux操作系统。您希望PHP会话持续时间超过默认的1440秒(24分钟)。所以,你这样做:

ini_set('session.gc_maxlifetime', 10800); # 3 hours 

使用此设置,会议应至少三小时保持活动状态,只要用户不关闭其browser.1

但是不管你做什么,会话在24-54分钟后不断删除。看来PHP忽略了gc_maxlifetime设置。

为什么发生这种情况

Debian和Ubuntu Linux的覆盖PHP的会话行为。如果仔细观察,您会发现session.gc_probability被设置为0,这意味着PHP的垃圾收集将永远不会运行。相反,/etc/cron.d/php5中有一个特定于Debian的cron作业,每30分钟运行一次!

cron作业基于php.ini中的全局session.gc_maxlifetime进行垃圾回收。应用中的session.gc_maxlifetime被忽略。

解决方案

虽然你可以禁用cron作业和/或修改php.ini中,我更愿意解决问题,而无需修改系统默认值。更好的解决方案是创建自己的会话目录,在正常的目录之外的某个地方,然后在本地启用PHP的会话垃圾回收。

为此set session.gc_maxlifetime, session.gc_probability, session.gc_divisor, and session.save_path

# Session lifetime of 3 hours 
ini_set('session.gc_maxlifetime', 10800); 

# Enable session garbage collection with a 1% chance of 
# running on each session_start() 
ini_set('session.gc_probability', 1); 
ini_set('session.gc_divisor', 100); 

# Our own session save path; it must be outside the 
# default system save path so Debian's cron job doesn't 
# try to clean it up. The web server daemon must have 
# read/write permissions to this directory. 
session_save_path(APP_PARENT_DIR . '/sessions'); 

# Start the session 
session_start(); 
+0

这个答案似乎是从这个博客文章复制:http://natesilva.tumblr.com/post/250569350/php-sessions-timeout-too-soon-no-matter-how-you。你是博客的作者,还是你找到它并复制相关信息? – Edward 2017-01-25 20:40:31