Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP会话变量在大约30分钟后为空_Php_Linux_Session_Variables - Fatal编程技术网

PHP会话变量在大约30分钟后为空

PHP会话变量在大约30分钟后为空,php,linux,session,variables,Php,Linux,Session,Variables,我遇到了一个问题,会话变量在大约35-40分钟后变为空。但是,会话ID似乎仍然显示为有效(与以前的数字相同) 我已经创建了一些测试代码,它读取并显示会话变量,然后在增加秒数后重新加载页面。它一直工作到2400秒,此时变量在下一次显示时为空。换句话说,当它在刷新之间等待2400秒时,它总是空的。我已经将.htaccess中的session.gc_maxlife设置为7800(显然是因为它在ini_get中读取为7800) 我要么错过了一些明显的东西,要么是一些严重的奇怪现象在起作用。这让我快发疯了

我遇到了一个问题,会话变量在大约35-40分钟后变为空。但是,会话ID似乎仍然显示为有效(与以前的数字相同)

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

我要么错过了一些明显的东西,要么是一些严重的奇怪现象在起作用。这让我快发疯了

这是在带有WHM的Linux VPS上实现的

创建测试会话的代码:

<?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')
    ));
?>
无效读取时的输出将memberid(我们需要的变量)、time(last_活动)和refresh time显示为null


有什么想法吗?

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

事实证明,问题是php.ini没有被运行时.htaccess或ini\u set中的设置正确覆盖,即使ini\u get将该值显示为被覆盖。原因尚不清楚,但有效的修复方法是简单地更改php.ini中的session.gc_maxlife。

另一个注意事项:我使用vi检查了/tmp目录中的sess_文件。奇怪的是,该文件是空的(尽管vi警告我没有访问权限)。现在看来,造成这种情况的原因是缺少ini_集或.htaccess设置来覆盖php.ini session.gc_maxlifetime设置。此设置已更新为7800,现在看来会话变量已保留。vi中的空sess_uu文件是由于权限不允许读取/显示。通过以root用户身份登录来验证内容。
<?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}