【发布时间】: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