PHP重置会话一段时间后

时间:2012-09-03 16:44:17

标签: php session session-cookies lamp

我知道这个问题已经在这里提出了,我已经尝试了解决方案,但它仍然没有修复。

PHP在一段时间不活动后正在删除会话(我假设是24分钟,因为它是默认的并且似乎适合测试)。

我在所有页面中都设置了以下代码:

ini_set('display_errors', 0);
$sessionCookieExpireTime = 2880000;
session_set_cookie_params($sessionCookieExpireTime);
ini_set('session.gc_maxlifetime', $sessionCookieExpireTime);

session_start();
echo ini_get('session.gc_maxlifetime'); //echos 2880000 as expected

但会话在24分钟(或左右)不活动后仍会重置。

phpinfo()为会话返回以下输出: enter image description here

知道为什么这不起作用? (PHP 5.3.10)

由于

2 个答案:

答案 0 :(得分:4)

尽管Marc B回答了一些很有见地的观点,但它并不适合我。我非常确定我的脚本一切都很好,我的代码中的会话没有任何问题。

经过史诗般的斗争后,我发现我的问题实际上是由于共享托管环境。从PHP文档:

  

“如果不同的脚本...共享相同的位置来存储会话   数据然后具有最小值的脚本将[确定   会话超时]“。

此后问题非常明显。一些脚本(托管在同一台服务器上)使用的是默认的php.ini session.gc_maxlifetime,重置了我的会话。

解决方案是在我的托管的根目录下创建一个文件夹(确保它不是Web可访问的),为它设置正确的权限,然后使用session.save_path告诉php在哪里存储我的会话。类似的东西:

ini_set("session.gc_maxlifetime","21600"); // 6 hours
ini_set("session.save_path", "/your_home/your_sessions/");
session_start();

本网站提供了很好的见解:php sessions on shared hosting

因此,如果您遇到此问题,请确保遵循Marc B建议,如果不起作用,请尝试此操作。

祝福!!

答案 1 :(得分:3)

您是否在使用会话的每个脚本中执行此代码? ini_set更改将 ONLY 应用于它们执行的脚本,并且仅适用于该特定脚本的执行生命周期。

如果你想让它成为一个永久的全局变化,你将不得不修改php.ini,或者将一些php_values指令放入http.conf / .htaccess。