增加php会话时间

时间:2011-03-08 20:46:51

标签: php session

我正在尝试将我的php会话时间增加到6小时。

以下是增加会话时间的代码:

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

但是,似乎只有1小时的会话时间。

非常感谢任何建议。

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

6 个答案:

答案 0 :(得分:10)

方案

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

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

使用此设置,只要用户不关闭浏览器,会话就应保持有效至少三小时.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();

答案 1 :(得分:3)

您还需要在php.ini

中更改几个变量

有关参数,请参阅http://prajapatinilesh.wordpress.com/2009/01/14/manually-set-php-session-timeout-php-session/

答案 2 :(得分:0)

如果有另一个运行的脚本(例如另一个vhost)使用相同的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时会迟到。

答案 3 :(得分:0)

Lemp/LAMP (Ubuntu) 我解决了我的问题

编辑:sudo nano /etc/php/7.2/fpm/php.ini

gc_maxlifetime 1440 到任意大数

session.gc_maxlifetime = 144000

答案 4 :(得分:-1)

  

尝试以下操作 -

  • 避免空格
  

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

     

  • 只需输入值为秒......
  

ini_set('session.gc_maxlifetime',21600);

答案 5 :(得分:-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]);