SESSION中的数组为什么有时候取得到,有时候取不到呢?
登录后:将用户对象user放入SESSIOn中 这样访问 $_SESSION['user']['priv']。有时候这个为空,需要将
$user=$_SESSION['user']; 后再访问,有时候直接$_SESSION['user']['priv']这样访问才可以,请问这是咋回事?
我的php版本 5.4.22
------解决方案--------------------本帖最后由 xuzuning 于 2014-06-12 16:34:52 编辑 你最好给出测试代码
至少也要给出 失败时 var_dump($_SESSION['user']); 的结果
------解决方案--------------------先排除个外因,会不会是你测试输出$_SESSION['user']['priv']的时候恰好第一次访问还没来的及设置session?
不能重现咋测试解决
------解决方案--------------------你就没怀疑过你代码写错了么!
$_SESSION['user']['priv'] = '' ; //priv赋值为空,谁取它都是空!
------解决方案--------------------$_SESSION 生命周期 默认时间为20分钟
明显 超过时间了
------解决方案--------------------有時可以,有時不行,應該寫個log,記錄每次的情況,這樣方便debug。
------解决方案--------------------第一次var_dump($_SESSION['user']);是否有值? 建议贴出代码以供分析。
------解决方案--------------------不能重現,你的測試代碼與運行代碼不同,你不提供代碼如何分析?
你加log,沒次讀取時,都輸出
var_dump($_SESSION['user']);
var_dump($_SESSION['user']['priv']);
方便找問題。
------解决方案--------------------楼主的意思是,第二次以后的访问,无论哪种方式都没问题,而第一次访问,直接读二维必然出事,而分开读正常,不知道我理解的对不对...
------解决方案--------------------乱码造成的吧?
------解决方案--------------------print_r($_SESSION['user']);
这样同时可以得到数据结构信息,才好做判断的依据
由于你不能再现错误,只有在对 $_SESSION 赋值的代码中找原因
极有可能是
从数据库里取出来的用户对象有时是数组,有时是对象
------解决方案--------------------其实我觉得就是在session赋值时出现的问题!
------解决方案--------------------这是thinkphp中session函数读取session的代码:
if (strpos($name, '.')) {
list($name1, $name2) = explode('.', $name);
return isset($_SESSION[$prefix][$name1][$name2]) ? $_SESSION[$prefix][$name1][$name2] : null;
} else {
return isset($_SESSION[$prefix][$name]) ? $_SESSION[$prefix][$name] : null;
}
如果session真的有BUG我想TP的用户早就反应了,他读取任何session都是直接读二维的
我建议楼主先在业务逻辑和session赋值上面找找原因
另外你说有和你一样问题的,不知道方便发些链接不
------解决方案--------------------检查从数据库取出的数据是否异常
------解决方案--------------------顶帖留名,坐等PHP BUG报告~~
------解决方案--------------------貌似没说清楚问题,也没找到原因。