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)
谢谢
尽管 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 的建议,如果这不起作用,请尝试此操作。
最好的祝愿!!