php会话出乎意料地超时

时间:2015-02-20 23:26:00

标签: php session

我有一个在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

2 个答案:

答案 0 :(得分:2)

Docs

  

session.gc_maxlifetime指定数据被视为“垃圾”并可能被清理的秒数。

因此,在24分钟后,您的会话将在服务器端到期,并且可能会被清除。

答案 1 :(得分:0)

我的解决方案是在session_start();

之后添加此行
$_SESSION['activity']=time();

每次用户与网站互动时,都会更新会话文件的上次修改日期。