4

在 Codeigniter 中将数组保存到会话数据时出现问题。

var_dump($this->session->userdata('data')); // output is boolean false

$array = array(0 => 'abc', 1 => 'def', 2 => 'ghi');
$this->session->set_userdata(array('data' => $array, 'name' => 'my_name'));

var_dump($this->session->userdata('data')); // output is 0 => 'abc', 1 => 'def', 2 => 'ghi'

每次加载页面时“userdata('data')”都会丢失,但其他用户数据正常。这意味着只有这个数组丢失了。我 100% 确定它可以工作,在我进行大量修改之前它对我有用,所以现在我找不到解决方案。

谢谢。

4

3 回答 3

7

我发现了问题所在。Codeigniter 在会话中有一些限制,我的数组太大了。 更多信息在这里

于 2012-07-10T14:32:52.083 回答
0

似乎在您的导航器中禁用了 cookie。

于 2012-07-10T13:28:43.967 回答
0

您需要使用数据库。4kb 限制是 cookie 大小的浏览器限制。保持 cookie 和会话较小通常是一个好习惯,因为到服务器上的对象(对于同一域)的每个请求标头都会发送此 cookie。

此外,关于数据库会话表的 CI 的一个很好的提示,将类型设置为 MEMORY,以便会话存储在 RAM 中而不是磁盘中,这使您的站点更快。

SQL

CREATE TABLE IF NOT EXISTS  `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(16) DEFAULT '0' NOT NULL,
user_agent varchar(50) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text NOT NULL,
PRIMARY KEY (session_id)
);

CI 配置(在 application/config/config.php 中):

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;
于 2014-11-06T10:42:51.683 回答