codeIgniter:登录后丢失会话数据

时间:2013-01-02 13:22:00

标签: php codeigniter session

在登录后的codeigniter中,我将所有数据存储到会话中并重定向到论坛控制器。但是我在论坛控制器中失去了所有的价值。

当我尝试从会话中减少一些值后,它可以很好地工作。

现在我的问题是 - 为什么会这样?在codeIgniter中是否存在会话中存储的值的上限?

即使我尝试搜索我发现

redirect('forum', 'refresh');

但它不起作用。我的项目已经完成了一半,所以我不能使用codeignter的“PHP Native Session class”。

4 个答案:

答案 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

干杯!