增加php会话时间

Ken*_*Ken 14 php session

我想把我的php会话时间增加到6个小时.

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

ini_set('session.gc_maxlifetime', 60 * 60 * 6); // 6 Hours 
Run Code Online (Sandbox Code Playgroud)

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

任何建议都非常感谢.

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

Roh*_*dal 10

场景

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

ini_set('session.gc_maxlifetime', 10800);    # 3 hours
Run Code Online (Sandbox Code Playgroud)

使用此设置,只要用户不关闭浏览器,会话应至少保持活动状态三小时

但无论你做什么,会话都会在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();
Run Code Online (Sandbox Code Playgroud)

  • 这个答案似乎是从这篇博客文章复制的:http://natesilva.tumblr.com/post/250569350/php-sessions-timeout-too-soon-no-matter-how-you。您是该博客的作者,还是您只是找到并复制了相关信息? (2认同)

小智 -23

用这个

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]); 
Run Code Online (Sandbox Code Playgroud)

  • 这根本就是不正确的。乘法的顺序并不重要。 (12认同)
  • 这只是我见过的最糟糕的答案;) (6认同)