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

[权限控制] 【已解决】版主!请教dx_auth出现unserialize()错误,如何解决?

[复制链接]
发表于 2010-3-4 12:00:40 | 显示全部楼层 |阅读模式
本帖最后由 deader 于 2010-3-10 11:03 编辑

使用dx_auth,在登录后出现如下错误,请问如何解决,谢谢!


A PHP Error was encountered
Severity: Notice
Message: unserialize() [function.unserialize]: Error at offset 0 of 6 bytes
Filename: dx_auth/permissions.php
Line Number: 54


A PHP Error was encountered
Severity: Warning
Message: Cannot modify header information - headers already sent by (output started at C:\sites\system\libraries\Exceptions.php:166)
Filename: libraries/Session.php
Line Number: 662


A PHP Error was encountered
Severity: Warning
Message: Cannot modify header information - headers already sent by (output started at C:\sites\system\libraries\Exceptions.php:166)
Filename: helpers/url_helper.php
Line Number: 541
 楼主| 发表于 2010-3-10 09:15:43 | 显示全部楼层
继续请教,等了几天了...
发表于 2010-3-10 10:23:03 | 显示全部楼层
dx_auth/permissions.php 54 行代码是什么,肯定是某些环境不符合,我对这个 dx 不熟悉,不过可以帮楼主分析一下。
 楼主| 发表于 2010-3-10 10:26:42 | 显示全部楼层
function _unserialize($data)
        {
                $data = unserialize(stripslashes($data));      //54行
               
                if (is_array($data))
                {
                        foreach ($data as $key => $val)
                        {
                                $data[$key] = str_replace('{{slash}}', '\\', $val);
                        }
                        
                        return $data;
                }
               
                return str_replace('{{slash}}', '\\', $data);
        }

麻烦版主分析一下
发表于 2010-3-10 10:34:41 | 显示全部楼层
明显是 stripslashes($data) 这个返回的数据有问题,print_r 一下出错时候的 $data
 楼主| 发表于 2010-3-10 10:36:29 | 显示全部楼层
解决了!
用base64_decode()来解决,分享一下,方法如下:

dx_auth/permissions.php
第39行 改为 return base64_encode(serialize($data));
第54行 改为 $data = unserialize(base64_decode(stripslashes($data)));
发表于 2010-3-10 10:54:11 | 显示全部楼层
呵呵,难道是有中文字符????
 楼主| 发表于 2010-3-10 11:02:40 | 显示全部楼层
嗯,session里有中文字符

本版积分规则