PHP会话在大型数据集上清空

时间:2018-02-18 01:50:05

标签: php session centos

我们有一个上传器,它接收客户数据,将数据映射到我们的数据库结构,然后上传到数据库。作为上传者的一部分,我们将所有上传的数据加载到内存中。

我们遇到的问题是“大型”数据集似乎会导致会话问题(当前示例失败大约为800kb)。在代码库中,每次页面加载检查一次会话内容,以确保用户登录并且有效等 - 在执行此上载和出错时,该检查在表单提交时失败。通过故障排除,我们发现当问题发生时,会话被清空,因此检查失败并导致用户退出。

该代码在开发中使用800kb数据集时工作正常,并且在大约100kb数据集的实时工作正常。这表明代码正常,问题是“环境”。

会话代码是:

// If the session hasn't been started yet.
if (session_status() == PHP_SESSION_NONE)
{
    // Start the session.
    session_start();
}

然后在文件中:

$_SESSION['csv_data'] = array_map('str_getcsv', file($file_path));

最后很多(不会到这里):

// Remove the session data.
unset($_SESSION['csv_data']);

我们尝试将PHP中的memory_limit更改为1GB甚至10GB甚至没有用 - 我们分别将max_filesize和post_max_size提升到512MB,同样的事情发生了(我们重新启动了HTTPD和PHP-FPM)

Session configuration

服务器是四核,32GB内存,在RAID 10中有4 x 256GB SSD - 在任何时候都没有空闲内存降至28GB以下,正常运行时间和顶部显示低使用率因此它似乎不缺乏传统资源造成问题。它运行Centos 6.9 64位,Apache 2.4.9运行PHP 5.6.33

服务器上还有什么可以设置(PHP)会话/内存大小的限制吗?还有什么我们可以试图找出可能导致这种情况的原因?

0 个答案:

没有答案