【问题标题】:php session timing out unexpectedlyphp会话意外超时
【发布时间】:2015-02-20 23:26:00
【问题描述】:

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

【问题讨论】:

    标签: php session


    【解决方案1】:

    Docs

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

    所以 24 分钟后,您的会话在服务器端过期并可能被清理。

    【讨论】:

      【解决方案2】:

      我的解决方案是在 session_start(); 之后添加这一行

      $_SESSION['activity']=time();
      

      这会在用户每次与网站交互时更新会话文件的最后修改日期。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-20
        • 2011-03-05
        • 2011-10-17
        • 2010-12-11
        • 2014-10-29
        相关资源
        最近更新 更多