2013-01-02 76 views
5

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

当我尝试从会话中减少一些值后,它完美地工作。

现在的问题是 - 为什么会这样? codeIgniter中会存储任何值的上限值吗?

即使我尝试搜索,我发现像

redirect('forum', 'refresh'); 

但它无法正常工作。而且我的项目已经开发了一半,所以我不能使用codeignter的“PHP Native Session class”。

+0

您可以使用本地会话类,它无缝集成。您可能必须向类的最大值添加一个方法。 (我至少) – jadkik94

+0

@ jadkik94:正如我已经提到,我不能使用本地会话类,因为我已经开发了大部分模块,并且不能去和改变每个文件。 –

+0

打开你的配置将会话保存到数据库。感谢您的时间和精力,请参阅http://ellislab.com/codeigniter/user-guide/libraries/sessions.html – mallix

回答

1

说明: 默认笨存储在cookie中,其具有的尺寸取决于浏览器2KB-4KB的上限的会话数据。 如果您尝试在会话中存储超过4KB的数据,您将开始遇到问题。

解决方案: 最简单的办法是到会话信息的过程存储在DB.The CodeIgniter session documentation细节在DB.it的设置了一个表,并改变了几个配置的问题存储会话参数。下面是你需要做 - 以下变量

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

7

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

最简单的解决方案可能是将会话详细信息存储在数据库中。 CodeIgniter session documentation详细说明了将会话存储在数据库中的过程 - 这是设置表格和更改一些配置参数的问题。

+0

。 –

4

CI会话将所有内容都存储在cookie中,并具有可选的加密功能。所以apparently有可能达到这个限度。这就是如果你存储2K字节的东西;如果只是登录信息,那应该不成问题。如果你确实使用了那么大的东西,那么我想你不应该这样做。

无论如何,我不认为这是问题,因为我有类似的问题(我不记得这个的确切原因)。我找到的解决方案是使用本机PHP会话类,并添加一个方法:all_userdata或任何它被称为。这样,一切就像正常会话一样工作(不需要改变任何东西)。

+0

感谢您的时间和精力。 –

+0

@ jadkik94我知道你前一阵子做过这个,但在使用Native PHP Session类之前,你是否尝试过使用CI会话数据库表(接受的答案)?如果是这样,你明白为什么它失败了吗?在我的情况下,它仍然会随机丢失会话。你能描述你添加的all_userdata方法吗? – Armfoot

+1

@Armfoot我不认为我曾试过数据库会话。 all_userdara方法刚刚返回'$ _SESSION'数组。无论如何,我认为在CI 3.0中,他们修改了整个Session类。如果您使用的是最新版本,请参阅[这里](http://www.codeigniter.com/user_guide/libraries/sessions.html#session-drivers)。 – jadkik94

0

在我的情况下,经过一些测试(HTTPS和HTTP在本地主机)后,错误来了这个问题,并没有正确设置$ config ['cookie_s_s ecure'],所以你可以尝试改变配置。php:

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

干杯!

+1

谢谢! upvoted为0 – Dug