根据Chrome,我网站的PHPSESSID Cookie到期时间设置为
Expires: Monday, November 26, 2012 2:46:39 PM
但会议仅在几个小时后到期。我在每个页面上调用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目录,因此它不是root(某些垃圾收集过程可能会删除cookie),所以我这样做了
$docroot = $_SERVER['DOCUMENT_ROOT'];
$tmpdir = "$docroot/tmpx";
session_save_path($tmpdir);
这不能解决问题。 (我在其他浏览器中也遇到同样的问题,而不仅仅是Chrome。)我还有什么其他错误?
更新:我在本地保存了当前会话的文件,然后在几小时后尝试登录。虽然Chrome中的PHPSESSID cookie(即内容为此会话文件名称的cookie)仍然按预期存储日期100天,但服务器上的实际会话文件现在不包含任何数据。 (它存在但是它是0字节而不是之前的192字节。)因此看起来会话文件没有被删除,但内容被删除。
答案 0 :(得分:3)
会话数据未正确处理的原因有很多。最有可能的是,会话未在加载的每个页面上启动并使用数据。要解决此问题,请确保在调用或重定向到的每个页面上启动session_start()。此外,如果您对会话配置进行了任何更改(例如,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()之前。
答案 1 :(得分:-1)
在session_start()
:
ini_set('session.use_cookies', 1);
ini_set('session.cookie_lifetime', 300*24*60*60);
由于各种原因,基于文件的会话可能会在您的系统上被破坏。尝试使用基于数据库的会话,看看是否能解决问题。