大约 30 分钟后 PHP session 变量为空

标签 php linux session variables

我遇到了 session 变量在大约 35-40 分钟后变为空的问题。但是, session ID 似乎仍显示为有效(并且与之前的编号相同)。

我已经创建了一些测试代码来读取和显示 session 变量,然后在增加的秒数后重新加载页面。它一直工作到 2400 秒,此时变量在下一次显示时为空。换句话说,它在刷新之间等待 2400 秒时始终为 null。我已将 .htaccess 中的 session.gc_maxlifetime 设置为 7800(它显然已设置,因为它在 ini_get 中读取为 7800)。

我要么遗漏了一些明显的东西,要么这里有一些严重的奇怪之处。这让我抓狂。

这是在带有 WHM 的 Linux VPS 上。

创建测试 session 的代码:

<?php
    // start session
    session_start();

    // set session value
    $_SESSION["session_memberid"] = 1234567;
    $_SESSION["session_refresh"] = 2000;

    // write file, close
    session_write_close();

    // display confirmation
    echo json_encode(array(
        '$_SESSION["session_memberid"]' => $_SESSION["session_memberid"],
        'session_id' => session_id(),
        'maxlifetime' => ini_get('session.gc_maxlifetime')
    ));
?>

读取 session 的代码(自动重新加载):

<?php
// start session
session_start();

// get session id
$session_id = session_id();

// get stored memberid
$member_id = $_SESSION['session_memberid'];
$_SESSION['session_memberid'] = $member_id;

// get last activity
$lastactivity = $_SESSION["last_activity"];

// increasing refresh time
$refresh = $_SESSION["session_refresh"];
$_SESSION["session_refresh"] = $refresh + 100;

// update time
$_SESSION["last_activity"] = time();

// write file, close
session_write_close();

...
(code to display and refresh variables)

有效读取时的输出:

{"memberid":1234567,"session_id":"c9d20d4992f184f29b259ef5ccab275f","sessionpath":"\/tmp","maxlifetime":"7800","sessioncookiepath":"\/","sessioncookielifetime":"0","referrer":"","autostart":"0","cache":false,"time":1365004882,"cookie":{"lifetime":0,"path":"\/","domain":"","secure":false,"httponly":false},"refresh":2400}

无效读取时的输出显示memberid(我们需要的变量),时间(last_activity)和刷新时间为空。

有什么想法吗?

最佳答案

是否有可能 apache 用户没有在/tmp 目录中写入的权限,并且 session 在该时间段内仅在 ram 中处于事件状态。一旦从 ram 中删除,它将默认为该文件,由于权限而从未被写入?

关于大约 30 分钟后 PHP session 变量为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15792674/

相关文章:

php - 如何在php中使用表单重定向到当前页面?

linux - 如何自定义 Postgres 数据库在 Linux 服务器上的位置?

linux - 引用内核模块中的 console_loglevel ERROR

java - 错误 : Unable to access jarfile sailfin-installer-v1-b60g-linux. jar

Spring框架。如何存储一些数据以防止每次访问数据库

ruby-on-rails - 使用 ruby​​ on Rails 创建用户登录计数方法

javascript - 如何使用两点经纬度绘制行车路线路径

php - XAMPP 与 PostgreSQL 9

php - 服务器到服务器的电子邮件传输安全吗?

java - magento xmlrpc session 立即过期