在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%肯定它可以工作,在我做了很多修改之前它对我有用,所以现在我找不到解决方案。
感谢。
答案 0 :(得分:7)
我发现了什么问题。 Codeigniter在会话中有一些限制,我的数组太大了。 More info here
答案 1 :(得分:0)
似乎您的导航器中已禁用Cookie。
答案 2 :(得分: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;