我有一个运行在apache上并使用php的站点。有时我让用户在网站上工作,然后他们突然失去了会话。我用开始会话
session_start()
并且它在用户的浏览器中放置PHPSESSID cookie。我也有
session.cookie_lifetime=0
在我的php.ini文件中。我还每5分钟做一次javascript长轮询,看看会话是否仍然处于活动状态。
以下是我用来查看会话是否仍处于活动的php代码
public function actionPollLogin()
{
if (isset($_SESSION['user']['id']))
{
echo $this->renderAjaxJson(array("success"=>1));
} else {
echo $this->renderAjaxJson(array("success"=>0));
}
}
如果成功==0,则我将用户返回到网站的公共部分。但正如我所说,奇怪的是,用户可以积极使用该网站,然后闲置20秒,然后注销。为了进行测试,我将会话转储到返回用户的屏幕上,以确认会话已终止。
我需要调整哪些设置以允许活动用户保持登录。
以下是我当前的php.ini设置
session.hash_bits_pre_character=5
session.hash_function=0
session.cache_expire=180
session.cache_limiter=nocache
session.referer_check=
session.gc_maxlifetime=1440
session.gc_divisor=1000
session.gc_probability=1
session.serialize_handler=php
session.cookie_httponly=
session.cookie_domain=
session.cookie_path=/
session.cookie_lifetime=0
session.auto_start=0
session.name=PHPSESSID
session.use_only_cookies=1
session.use_cookies=1
session.use_strict_mode=0
文档
session.gc_maxlifetime指定数据被视为"垃圾"并可能被清除的秒数。
因此,24分钟后,您的会话将在服务器端过期,并可能被清理。
我的解决方案是在session_start()之后添加此行;
$_SESSION['activity']=time();
每当用户与网站交互时,这会更新会话文件的最后修改日期。