【问题标题】:PHP SESSION resets with too much dataPHP SESSION 因数据过多而重置
【发布时间】:2014-01-28 12:40:17
【问题描述】:

我创建了一个测试文件来了解我的会话可以有多大。

是这样的:

print_r($_SESSION);
$test = array();

for ($i=0;$i<3320;$i++) {
    $test[$i] = "test:)";
}

$size = mb_strlen(serialize($test), '8bit');

echo "Size: $size";

$_SESSION['test'] = $test;

当我这样做时,$_SESSION['test'] 被重置(它的值是什么)。当我在较小的for(3319 次)或较短的字符串中执行此操作时,它工作正常。在这种情况下,大小值是 65279 字节。我想我应该能够更改 php.ini 中的一些设置以存储更多数据,但那会是哪一个?

仅供参考 - 我不关心性能,当时使用脚本的人不应该超过一个,而且它是为了与另一台服务器同步,所以用户无论如何都需要等待。我只是在寻找如何在$_SESSION 表中存储更多数据的信息。

我的 PHP 版本是 5.2.17,我正在使用 osCommerce(非常旧的版本)。

【问题讨论】:

  • 会话变量不应该有大小限制(尽管听起来这里可能有 64k[-ish] 限制)。你有没有像 Suhosin 这样的 PHP 扩展可能会施加这样的限制?
  • 我没有您所说的 Suhosin,但我不知道我的任何扩展是否无法施加这些限制。该站点使用的是旧的 osCommerce,可能就是这种情况。
  • PHP 5.x.x 在 session_start() 处将整个会话加载到内存中;有 20 MB 会话和 50 个并发用户,问候!
  • 嗯,听起来不太可能。
  • 我找到了解决方案 - 它非常简单。会话存储在数据库中,存储值的字段设置为Text(其限制为 65,535 字节)。

标签: php session oscommerce


【解决方案1】:

抱歉误导了各位。原因似乎是我将会话存储在数据库中(使用 osCommerce)。保存 session 值的数据库字段设置为 Text 类型,即 64KB。我已将其更改为 Mediumtext (16MB)。如果有人在他们的会话中需要更多数据,他们可能想要使用Longtext (4GB)。

【讨论】:

    【解决方案2】:

    您不能在 php.ini 中为会话设置大小。 但是,您可以设置内存限制[如果这样做,我建议您注意代码中的限制]。

    http://ca.php.net/manual/en/ini.core.php#ini.memory-limit

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多