CI的一个Session丢失的Bug

  今天同组的同事跟我反映前台点击一些功能跳转到用户中心登陆后不会自动返回登陆前的页面。之前也没仔细测试,乘现在仔细调试调试。

  这个项目是基于CodeIgniter开发的,进入登陆页面时会把来源网址记录在CI的Session里,登陆成功后跳转回去,看来是记录的数据丢失了。

  CI的Session其实是将数据序列化后存在于数据库或者Cookie中,我用的是存在Cookie中,用开发者工具查看数据是在保存起来的,但是用CI的Session类读取数据就是读取不到,经过调试,初步发现原数据被清除了。进一步跟踪,发现是在检验Cookie数据的MD5值时与原值对不上,一时纳闷了,为什么会对不上呢?仔细看了下取出来的Cookie的值,发现urlencode后保存的网址数据被自动解码了,存之前的MD5是编码后的数据,取出来的是解码后的,因此对不上,CI为了安全,认为此数据被人为修改了,就销毁了它。

  这是在谷歌Chrome浏览器下出现的状况,不知道在其它浏览器下读取Cookie会不会自动解码,暂时没时间一一测试。

  找到原因,就好解决了,存数据的时候不要进行网址编码,如有必要在取出来后再进行urlencode编码。

发表评论

电子邮件地址不会被公开。 必填项已用*标注