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

[会话/Cookie] set_flashdata设置中文导致跳转后内容失效的解决办法

[复制链接]
发表于 2013-6-5 10:39:30 | 显示全部楼层 |阅读模式
最近几次遇到这样的问题,在调用session的set_flashdata设置完中文错误提示并redirect之后,却发现cookie中的user_data字段内容消失了,仔细查看了session.php的代码,最终解决了这个问题。
注意:是将cookie内容保存在数据库的情况下。
详细学习一下session.php的流程,会发现每次调用session中的方法,都会先在构造函数中先去执行sess_read方法,然后根据执行结果来选择sess_update或sess_create方法。
其实大家很容易发现,在redirect之前、或者重新调用session中的方法之前,user_data中的中文内容都是存在的,为什么当再一次调用session中的方法之后,内容就消失了呢?
详细查看一下sess_read方法,会发现有一段从数据库ci_session表中读出保存的cookie内容的代码,所有的cookie字段都是从这部分代码中读取出来的。当ci_session表字段的属性不支持中文字符时,读出的内容就是??,会导致这部分代码段无法获取相应字段内容,从而丢失。
所有,一定要保证ci_session表中的字段属性支持中文字符,比如utf8-general-ci。


本版积分规则