5

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

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

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

即使我尝试搜索我发现

redirect('forum', 'refresh');

但它不起作用。而且我的项目开发了一半,所以我不能使用codeignter的“PHP Native Session class”。

4

4 回答 4

7

默认情况下,CodeIgniter 将会话数据存储在 cookie 中,其大小上限为 4KB。如果您尝试在会话中存储超过 4KB 的数据,您将开始遇到问题。

最简单的解决方案可能是将会话详细信息存储在数据库中。CodeIgniter 会话文档详细介绍了将会话存储在数据库中的过程——这是一个设置表和更改几个配置参数的问题。

于 2013-01-02T13:30:13.677 回答
4

CI 会话将所有内容存储在 cookie 中,并带有可选的加密。所以显然有可能达到这个极限。那就是如果您存储类似 2K 字节的内容;如果只是登录信息,那应该不是问题。如果您确实使用了那么大的东西,那么我想您不应该使用。

无论如何,我认为这不是问题,因为我遇到了类似的问题(我不记得确切的原因)。我找到的解决方案是使用 Native PHP Session 类,并为其添加一个方法:all_userdata 或任何它被调用的方法。有了这个,一切都像正常的 Session 一样工作(无需更改任何内容)。

于 2013-01-02T13:31:40.227 回答
1

说明: 默认情况下,CodeIgniter 将会话数据存储在 cookie 中,根据浏览器的大小,其大小上限为 2KB-4KB。如果您尝试在会话中存储超过 4KB 的数据,您将开始遇到问题。

解决方案:最简单的解决方案是将会话详细信息存储在 DB 中。CodeIgniter会话文档详细说明了将会话存储在 DB 中的过程。只需设置一个表,并更改几个配置参数。以下是您需要做的更改-

更新配置文件(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

于 2013-11-08T18:14:58.803 回答
0

就我而言,经过一些测试(在 localhost 中使用 https 和 http)后,该问题出现了错误,并且没有正确设置 $config['cookie_secure'],因此您可以尝试在 config.php 中进行更改:

$config['cookie_secure']    = FALSE; // if is not under https, or true if you use https

干杯!

于 2014-07-21T09:18:01.937 回答