首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CodeIgniter 3会话混淆

CodeIgniter 3会话混淆
EN

Stack Overflow用户
提问于 2015-07-16 20:11:19
回答 3查看 2.4K关注 0票数 1

处理升级到CodeIgniter 3的工作,并遇到会话类的一些问题。

我们被配置为将会话存储在数据库中。我们已经设置了适当的ci_sessions表,并在Config.php中这样做:

代码语言:javascript
复制
$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服务器版本对应的手册,以便在第1行使用接近'SET last_activity = 1437070556,user_data =‘a:14:{s:\\“user_data\;s:0:\’的正确语法。 更新集last_activity = 1437070556,

如您所见,更新和SET之间缺少表名。

为了解决这个问题,我进入了Config.php并添加了旧的不推荐的设置表名的方法,您不应该再使用这个方法了:

代码语言:javascript
复制
$config['sess_table_name'] = 'ci_sessions';

这样做更好,但我得到了一个新的错误:

发生数据库错误 错误编号: 1054 'where子句‘中未知列'session_id’ 更新ci_sessions SET last_activity = 1437075587,user_data = 'a:14:{从示例中删除的会话数据}‘ 其中session_id =‘636c6c7389342a7a211e3e2c3c3f03’ 文件名:库/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:

新的附加问题:

代码语言:javascript
复制
$this->load->library('session');
$data = $_SESSION['data'];

抛出Undefined variable: _SESSION。我最初的印象是,在任何给定的函数中,我必须先写到$_SESSION,然后才能从$_SESSION中读取

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-16 20:46:20

代码发生了一些奇怪的事情。

根据用于CodeIgniter3的会话数据库配置文档,需要用以下结构初始化会话表:

代码语言:javascript
复制
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()函数中进行了以下调用:

代码语言:javascript
复制
        $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列的跟踪。

票数 2
EN

Stack Overflow用户

发布于 2016-06-01 15:31:33

在将表单代码点火器2移动到3之后,我遇到了这个问题。我用CI3附带的新文件夹替换了"system“文件夹来解决这个问题。

票数 1
EN

Stack Overflow用户

发布于 2015-09-15 15:19:10

我也遇到了同样的问题,并通过删除系统文件夹并将其替换为CI3 zip中的原始文件夹来解决这个问题。由于升级,我以前重写了它,但是仍然有这个错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31463642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档