PHP在一段时间后重置会话

PHP在一段时间后重置会话,php,session,session-cookies,lamp,Php,Session,Session Cookies,Lamp,我知道这个问题已经在这里提出了,我已经尝试了解决方案,但它仍然没有得到解决 PHP在一段时间的不活动之后删除会话(我假设24分钟是默认的,似乎适合测试) 我在所有页面中设置了以下代码: ini_set('display_errors', 0); $sessionCookieExpireTime = 2880000; session_set_cookie_params($sessionCookieExpireTime); ini_set('session.gc_maxlifetime', $ses

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

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分钟(大约24分钟)不活动后,会话仍然会被重置

phpinfo()为会话返回以下输出:

你知道为什么这样不行吗?(PHP 5.3.10)


谢谢

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


如果你想让它成为一个永久性的全局更改,你必须修改php.ini,或者把一些php_值指令放到http.conf/.htaccess中。

尽管Marc B answer分享了一些很好的见解,但它对我不起作用。我非常确定我的脚本一切都很好,我的代码中没有任何内容会弄乱会话

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

“如果不同的脚本…共享存储会话的相同位置 然后,具有最小值的脚本将[确定 会话超时]”

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

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

ini_set("session.gc_maxlifetime","21600"); // 6 hours
ini_set("session.save_path", "/your_home/your_sessions/");
session_start();
该网站提供了很好的见解:

所以,如果你遇到这个问题,一定要遵循Marc B的建议,如果不起作用,试试这个


最好的祝愿!!

是的,我确定。这是在index.php上完成的,该文件包括所有其他内容。谢谢检查是否有外部进程(例如cron作业)这会破坏php back.session.gc_maxlifetime后面的会话文件,以概率为基础,您的会话不必在24分钟后超时,只需将配置添加到.htaccess即可。在cron端,我有两个会话,但它们每月运行一次,现在已经有一段时间没有运行了。PS:我正在等待在此之后超时最后更改。我很快会回来发布结果。谢谢你的帮助