用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5878|回复: 9
收起左侧

[版本 2.x] sinaapp上无法使用kndb session

[复制链接]
发表于 2011-11-6 15:56:11 | 显示全部楼层 |阅读模式
CI version:2.0.3

Environment:sina app engine (mysql+php+apache)


解决了SAE的mysql数据库连接问题后,我又遇到了第二个问题,我在本地使用我的博客程序时,本地wamp是用KNDB的。但sinaapp在执行我的程序时,使用了CI自带的Session类库,而没有使用KNDB Session。
错误显示如下:
A Database Error Occurred
Error Number: 1054
Unknown column 'ip_address' in 'field list'
INSERT INTO `sessions` (`session_id`, `ip_address`, `user_agent`, `last_activity`) VALUES (具体值略)
Filename: libraries/Session.php
Line Number: 327


通过错误提示的行为方式可知,它使用了自带Session的方法,向数据库插入(`session_id`, `ip_address`, `user_agent`, `last_activity`) ,而我没有建立这样的字段,自然失败了。

我的config.php
PHP复制代码
$config['sess_cookie_name']  = 'ci_session';
$config['sess_expiration']  = 1800;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name']  = 'sessions';
$config['sess_match_ip']  = TRUE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;
复制代码


为什么会发生这种事,如何解决?
发表于 2011-11-6 16:54:53 | 显示全部楼层
{:soso_e117:}那你倒是把表建对呀
 楼主| 发表于 2011-11-6 22:29:45 | 显示全部楼层
jeongee 发表于 2011-11-6 16:54
那你倒是把表建对呀

版主,我要用的是KNDB的session,它的那套方法不需要建立这些字段就可以工作啊(我在本地用的好好的)。。我要是建了这些字段通过了,不就使用自带的session了吗?KNDB比自带的session到底有哪些好处?版主请大力拍砖~
发表于 2011-11-7 07:04:48 | 显示全部楼层
$config['sess_use_database'] = TRUE;
这么清楚的配置项,你设置了数据库来保存session状态,php当然就会到数据库里面查表了。
ci的手册说的很明白,ci不用php自带的session而是自己实现了一套,如果你不用数据库保存session的话,CI_Session的信息就全部保存到客户端cookie,当然是加密过的。
发表于 2011-11-7 09:08:58 | 显示全部楼层
五点晨曦 发表于 2011-11-7 07:04
$config['sess_use_database'] = TRUE;
这么清楚的配置项,你设置了数据库来保存session状态,php当然就会 ...

顶一个!
但是楼主的问题是否解决了呢?回复下呗
发表于 2011-11-7 12:05:46 | 显示全部楼层
CI 自带的 Session 肯定和 KNDB Session 不一样,所以不能互换使用。
建议楼主只选择一种 Session 类库,而不要换来换去的,这样肯定会有问题。
 楼主| 发表于 2011-11-7 17:45:46 | 显示全部楼层
Hex 发表于 2011-11-7 12:05
CI 自带的 Session 肯定和 KNDB Session 不一样,所以不能互换使用。
建议楼主只选择一种 Session 类库,而 ...

我不想使用自带的Session类库啊,我一向是使用KNDB的。是传到服务器上去不知道服务器怎么的就使用了自带的Session类库,我没有修改任何代码,本地和服务器端就是两种表现。。。

确认一下,使用KNDB的Session类库是不是在application/libraries目录下放置KNDB的session.php,然后在autoload.php文件中加入$autoload['libraries'] = array('database','session');?我是参考《kndb session 用法简介》http://codeigniter.org.cn/forums ... thread&tid=1757和一哈子的视频方法做的。

现在问题是服务器端“自作主张”使用了自带的Session类库而没有使用KNDB,而我没办法。。。
发表于 2011-11-7 19:13:40 | 显示全部楼层
代码都是一样的,那就是服务器环境问题,你要确定代码是一模一样的才行。
发表于 2011-11-9 00:56:55 | 显示全部楼层
haoren26 发表于 2011-11-7 17:45
我不想使用自带的Session类库啊,我一向是使用KNDB的。是传到服务器上去不知道服务器怎么的就使用了自带 ...

肯定是什么地方加载了原生的session类库,你把原生的session类库删了,看看报错信息是哪个文件引用了它,要是删了还能用那就见鬼了
 楼主| 发表于 2011-11-9 13:33:14 | 显示全部楼层
五点晨曦 发表于 2011-11-9 00:56
肯定是什么地方加载了原生的session类库,你把原生的session类库删了,看看报错信息是哪个文件引用了它, ...

如果在autoload.php文件里设置了$autoload['libraries'] = array('database','session');那么如果application/libraries目录下和system/libraries目录下都有名为Session.php,会不会有优先级?是以application优先吗?

你是意思是把system/libraries目录下的Session.php删了吗?我曾经直接用KNDB的全部代码替换system/libraries目录下的Session.php代码,结果得到很多Mysql连接的错误,错误原因集中在端口号错误,CI没有按照database中的设置(SAE_MYSQL_PORT)而是用了默认的3306端口

本版积分规则