将数组保存到 Codeigniter 中的会话
Posted
技术标签:
【中文标题】将数组保存到 Codeigniter 中的会话【英文标题】:Saving array to session in Codeigniter 【发布时间】:2012-07-09 23:31:56 【问题描述】:在 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% 确定它可以工作,在我进行大量修改之前它对我有用,所以现在我找不到解决方案。
谢谢。
【问题讨论】:
将会话处理程序更改为数据库并检查它,然后告诉我结果 在这种情况下我不使用数据库 我们能看到 CodeIgniter 中为会话设置的配置变量吗?它应该在application/config/config.php
【参考方案1】:
我发现了问题所在。 Codeigniter 在会话中有一些限制,我的数组太大了。 More info here
【讨论】:
【参考方案2】:您的导航器中似乎禁用了 cookie。
【讨论】:
它已启用,在同一个会话中我有我可以读取的数据,例如关于登录的数据。我只丢失了一个数组 @mesnicka 是的,您对 CI 会话有一些限制,并且 CI 会话的行为不像 PHP $_SESSION。我也遇到了这个问题&我做了什么我只是在我的案例数据库行ID中设置了参考ID然后访问它们但这不是我真正想要的但是我使用了这种方法:(【参考方案3】:您需要使用数据库。 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;
【讨论】:
以上是关于将数组保存到 Codeigniter 中的会话的主要内容,如果未能解决你的问题,请参考以下文章