php - 为什么我的 PHP session 提前过期?

标签 php

根据 Chrome,我网站的 PHPSESSID cookie 过期设置为

Expires:    Monday, November 26, 2012 2:46:39 PM

但是 session 仅在几个小时后就过期了。我在每个页面上调用 session_start() 。阅读针对类似问题提供的解决方案,我尝试设置

ini_set("session.cache_expire",300*24*60*60);

ini_set("session.gc_maxlifetime",100*24*60*60);

session_start()之前,但这并没有解决问题。 (它们的初始值分别设置为180和1440。)

我在共享服务器上,另一个建议是更改默认的 tmp 目录,使其不是根目录(其中某些垃圾收集进程可能会删除 cookie),所以我这样做了

$docroot = $_SERVER['DOCUMENT_ROOT'];
$tmpdir = "$docroot/tmpx";
session_save_path($tmpdir);

这并不能解决问题。 (我在其他浏览器中也遇到了同样的问题,而不仅仅是 Chrome。)我还可能做错了什么?

更新:我在本地保存了当前 session 的文件,然后在几个小时后尝试登录。虽然 Chrome 中的 PHPSESSID cookie(即,其内容是此 session 文件名称的 cookie)仍按照预期存储 100 天后的日期,但服务器上的实际 session 文件现在不包含任何数据。 (它存在,但它是 0 字节,而不是之前的 192 字节。)所以看起来 session 文件没有被删除,但内容正在被删除。

最佳答案

session 数据未得到正确处理的可能原因有很多。最有可能的是, session 并未在加载并使用数据的每个页面上启动。要解决此问题,请确保在调用或重定向到的每个页面上启动 session_start()。另外,如果您对 session 配置(例如 ini_set())进行任何更改,请确保将其应用于全局或每个页面。要全局应用它,请添加

php_flag session.gc_maxlifetime <your value>
php_flag session.cache_expire <your value>

到您的 .htaccess 文件。或者,您可以添加

ini_set("session.gc_maxlifetime", <value>);
ini_set("session.cache_expire", <value>);

在每个调用 session_start() 的页面上直接在 session_start() 之前。

关于php - 为什么我的 PHP session 提前过期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12021900/

相关文章:

php - Laravel 中未定义路由 [signup]

php - 代码点火器 : Email attachment of last emails not cleared while sending multiple emails in loop

PHP - 遍历 $_FILES 以检查文件类型

php - 跨多个文件替换输入标签的值

javascript - 使用 PHP 运行 Javascript 后获取 URL 的内容(文本)

javascript - 为什么ajax成功调用后jquery会中断?

php - 分析仪表板策略

php - 使用 PDO::bindValue(带或不带类型标识符)与执行之间有什么区别吗?

php - 如何构建多维数组?

php - 从数组中删除多个值