【发布时间】:2015-10-06 10:56:22
【问题描述】:
正在升级到 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 服务器版本相对应的手册,以在 'SET
last_activity= 1437070556,user_data= 'a:14:{s:9:\\"user_data\\";s:0 附近使用正确的语法:\\"\' 在第 1 行更新集
last_activity= 1437070556,
如您所见,在 UPDATE 和 SET 之间缺少表名
为了解决这个问题,我进入了 Config.php 并添加了旧的不推荐使用的设置表名的方法,你不应该再使用了:
$config['sess_table_name'] = 'ci_sessions';
这样效果更好,但我收到一个新错误:
发生数据库错误
错误号:1054
“where 子句”中的未知列“session_id”
UPDATE
ci_sessionsSETlast_activity= 1437075587,user_data= 'a:14:{ [从示例中删除的会话数据] }'在哪里
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
【问题讨论】:
-
MySQL 命令
DESC ci_sessions的输出是什么?它正在尝试运行查询,但告诉您不存在其会话存储所需的此类列session_id。听起来会话表没有正确定义。 -
@drew010,ci_sessions 表的官方表定义不要求 session_id 列。此外,如果我使用新的 $_SESSION 超全局变量,我可以存储会话数据,但不能使用应该仍然有效的旧方法
-
在下面查看我的回答,了解它为什么使用
session_id。这可能意味着正在使用的会话代码未使用最新的 CI3 会话库。如果您查看CI2 session 的代码,它使用session_id,CI3 sessions 使用id,因此正在运行的库代码是 CodeIgniter2 而不是 3,因此是 sql 错误。 -
@halfer 在问题被搁置并看到我在标题中犯的愚蠢错字之后,我变得非常尴尬,完全删除了这个问题。但是,我刚刚为您取消删除它。感谢您的帮助。
标签: php codeigniter session