|
我目前在用codeigiter的FreakAuth插件,觉得挺方便的,但是发现在中文环境下有bug。
前几天安装好之后一切正常,能登录、注册、找回密码等等。今天我在 config.php 中设定language为zh-cn,并且写好相应的lang文件后,界面一切正常,能显示中文,但是确登录不了了。提交登录表单后,仅仅是刷新一下页面。
经过调试,发现POST到服务器后,能登录成功并转向登录后页面(requested page),role也设为superadmin了(我用的是superadmin组的用户测试)。但是在requested page,却不认这个账,竟然role还是guest,于是又被遣送回登录页。
再仔细看过去,发现是DB_session收到了这个变量却没有储存成功。经过log,发现session中含有中文时,DB_session有一个错误。log如下:- DEBUG - 2008-05-31 08:02:36 --> Session data:a:10:{s:24:"flash:old:requested_page";b:0;s:2:"id";s:1:"1";s:9:"user_name";s:5:"admin";s:10:"country_id";N;s:5:"email";s:12:"notme@163.com";s:4:"role";s:10:"superadmin";s:10:"last_visit";s:19:"2008-05-31 07:40:36";s:7:"created";s:19:"2008-05-31 15:40:36";s:8:"modified";s:19:"0000-00-00 00:00:00";s:22:"flash:new:flashMessage";s:15:"?????";}
- ERROR - 2008-05-31 08:02:36 --> Severity: Notice --> unserialize() [<a href='function.unserialize'>function.unserialize</a>]: Error at offset 328 of 340 bytes F:\Program Files\Easy2PHP5\WebSite\ci\system\application\libraries\Db_session.php 209
复制代码 出错的地方应该是
flash:new:flashMessage";s:15:"?????"
flashMessage正是中文的。
因为初学PHP,对编码处理不是很熟,只好将中文encode一下处理:
1.将application/helps/FreakAuth_light_helper.php的第291行:- $obj->db_session->set_flashdata('flashMessage', $msg);
复制代码 改为- $obj->db_session->set_flashdata('flashMessage', urlencode($msg));
复制代码 2.将相关模板的- $flash=$this->db_session->flashdata('flashMessage');
复制代码 改为- $flash=urldecode($this->db_session->flashdata('flashMessage'));
复制代码 相关模板:
application/views/FreakAuth_light/template/content.php
application/views/FreakAuth_light/template_admin/content.php
虽然将问题暂时解决,但是貌似比较麻烦,请教一下各位大大,这种session中包含中文的情况,一般应怎么处理?
[ 本帖最后由 qhwa 于 2008-5-31 16:26 编辑 ] |
|