在登录后的codeigniter中,我将所有数据存储到会话中并重定向到论坛控制器。但是我在论坛控制器中失去了所有的价值。
当我尝试从会话中减少一些值后,它可以很好地工作。
现在我的问题是 - 为什么会这样?在codeIgniter中是否存在会话中存储的值的上限?
即使我尝试搜索我发现
redirect('forum', 'refresh');
但它不起作用。我的项目已经完成了一半,所以我不能使用codeignter的“PHP Native Session class”。
答案 0 :(得分:7)
默认情况下,CodeIgniter会将会话数据存储在cookie中,其大小上限为4KB。如果您尝试在会话中存储超过4KB的数据,您将开始遇到问题。
最简单的解决方案可能是将会话详细信息存储在数据库中。 CodeIgniter session documentation详细说明了在数据库中存储会话的过程 - 这是设置表和更改几个配置参数的问题。
答案 1 :(得分:4)
CI会话将所有内容存储在cookie中,并带有可选加密。所以apparently有可能达到这个限制。那就是你存储2K字节的东西;如果它只是登录信息,那应该不是问题。如果你确实使用了那么大的东西,我猜你不应该这样做。
无论如何,我不认为这是问题,因为我有类似的问题(我不记得这个的确切原因)。我发现的解决方案是使用Native PHP Session类,并为其添加了一个方法:all_userdata或者它被调用的任何方法。有了它,一切都像普通的Session一样工作(不需要改变任何东西)。
答案 2 :(得分:1)
<强>解释强>: 默认情况下,CodeIgniter将会话数据存储在cookie中,根据浏览器的不同,cookie的大小上限为2KB-4KB。 如果您尝试在会话中存储超过4KB的数据,您将开始遇到问题。
<强>解决方案强>: 最简单的解决方案是将会话详细信息存储在数据库中。CodeIgniter session documentation详细说明了在DB中存储会话的过程。这是设置表和更改几个配置参数的问题。以下是您需要做的更改 -
在Config文件(application / config / config.php)中更新以下变量:
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'ci_sessions';
创建了用于存储会话的新表 -
CREATE TABLE IF NOT EXISTS `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(45) DEFAULT '0' NOT NULL,
user_agent varchar(120) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text NOT NULL,
PRIMARY KEY (session_id),
KEY `last_activity_idx` (`last_activity`)
);
了解更多信息:http://goo.gl/YPllj0
答案 3 :(得分:0)
在我的情况下,经过一些测试(使用本地主机中的https和http),错误就出现在该问题上而未正确设置$ config [&#39; cookie_secure&#39;],因此您可以尝试更改配置.PHP:
$config['cookie_secure'] = FALSE; // if is not under https, or true if you use https
干杯!