升级到CodeIgniter 3 ,遇到Session类的一些问题。
我们配置为在数据库中存储会话。我们已经设置了正确的ci_sessions
表,并在Config.php中有这个:
$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 600;
$config['sess_save_path'] = 'ci_sessions';
尝试使用$this->session->set_userdata($data);
上面我们得到一个错误,表明CI没有从" sess_save_path"中读取表名。变量:
您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以便在#
last_activity
= 1437070556,user_data
=' a:14:{s:9:\附近使用正确的语法\"的user_data \\&#34 ;; S:0:\\" \'第1行UPDATE SET
last_activity
= 1437070556,
正如您所看到的,UPDATE和SET
之间缺少表名为了解决这个问题,我进入了Config.php并添加了旧的弃用方法来设置你不应该再使用的表名:
$config['sess_table_name'] = 'ci_sessions';
这样做效果更好,但我收到了一个新错误:
发生数据库错误
错误号码:1054
未知列' session_id' in' where子句'
UPDATE
ci_sessions
SETlast_activity
= 1437075587,user_data
=' a:14:{[会话数据从示例中删除]}'WHERE
session_id
=' 636c6c7389342a7a21111e3e2c3c3f03'文件名:libraries / Session.php
行号:306
发生了什么,我该如何解决?为什么$config['sess_save_path'] = 'ci_sessions';
不起作用?与session_id
字段有什么关系?
修改
经过更多测试后,我得出结论:
$config['sess_save_path'] = 'ci_sessions';
无法正常工作
$this->session->set_userdata($data);
无法正常工作
$this->session->set_userdata('name', $data);
无法正常工作
$_SESSION['name'] = $data
有效
CI3文档是否非常不准确,或者是其他错误?
编辑2:
新的附加问题:
$this->load->library('session');
$data = $_SESSION['data'];
抛出Undefined variable: _SESSION
。我最初的印象是,在任何给定的函数中,我必须写入$ _SESSION才能从$ _SESSION中读取
答案 0 :(得分:2)
代码中发生了一些奇怪的事情。
根据session database configuration的CodeIgniter3文档,会话表需要使用以下结构进行初始化:
CREATE TABLE IF NOT EXISTS `ci_sessions` (
`id` varchar(40) NOT NULL,
`ip_address` varchar(45) NOT NULL,
`timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
`data` blob NOT NULL,
PRIMARY KEY (id),
KEY `ci_sessions_timestamp` (`timestamp`)
);
根据您的错误,session_id
列不存在,而不是CodeIgniter3正在使用的列。您的代码是否仍以某种方式加载CI2会话代码?我下载了最新版本的CI3,并在Session_database_driver::write()
函数中进行了以下调用:
$insert_data = array(
'id' => $session_id,
'ip_address' => $_SERVER['REMOTE_ADDR'],
'timestamp' => time(),
'data' => ($this->_platform === 'postgre' ? base64_encode($session_data) : $session_data)
);
正如您所看到的,session_id
列没有任何痕迹。
答案 1 :(得分:1)
我将表格codeigniter 2移动到3后遇到了这个问题。我用替换" system"解决了这个问题。 CI3附带的新文件夹
答案 2 :(得分:0)
我有同样的问题并通过删除系统文件夹并将其替换为CI3 zip中的原始文件来解决它。我之前因为升级而覆盖了它,但仍然有这个错误。