一段时间后PHP重置会话

jri*_*iro 3 php session lamp session-cookies

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

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

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

phpinfo() 为会话返回以下输出: 在此处输入图片说明

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

谢谢

jri*_*iro 5

尽管 Marc B answer 分享了一些很棒的见解,但它对我不起作用。我很确定我的脚本一切正常,我的代码中的会话没有任何问题。

经过一场史诗般的斗争,我发现我的问题实际上是由于共享托管环境造成的。来自 PHP 文档:

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

这之后问题就很明显了。某些脚本(托管在同一台服务器上)正在使用默认的 php.ini session.gc_maxlifetime 并且正在重置我的会话。

解决方案是在我的主机的根目录下创建一个文件夹(确保它不能通过网络访问),为其设置正确的权限,然后使用 session.save_path 告诉 php 在哪里存储我的会话。就像是:

ini_set("session.gc_maxlifetime","21600"); // 6 hours
ini_set("session.save_path", "/your_home/your_sessions/");
session_start();
Run Code Online (Sandbox Code Playgroud)

该网站提供了很好的见解:共享主机上的 php 会话

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

最好的祝愿!!