Maison >développement back-end >tutoriel php >SESSION中的数组为啥有时候取得到,有时候取不到呢

SESSION中的数组为啥有时候取得到,有时候取不到呢

WBOY
WBOYoriginal
2016-06-13 11:59:541300parcourir

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 赋值的代码中找原因

极有可能是从数据库里取出来的用户对象有时是数组,有时是对象
------解决方案--------------------
引用:
print_r($_SESSION['user']);
这样同时可以得到数据结构信息,才好做判断的依据
由于你不能再现错误,只有在对 $_SESSION 赋值的代码中找原因

极有可能是从数据库里取出来的用户对象有时是数组,有时是对象


其实我觉得就是在session赋值时出现的问题!
------解决方案--------------------
这是thinkphp中session函数读取session的代码:
<br />            if (strpos($name, '.')) {<br />                list($name1, $name2) = explode('.', $name);<br />                return isset($_SESSION[$prefix][$name1][$name2]) ? $_SESSION[$prefix][$name1][$name2] : null;<br />            } else {<br />                return isset($_SESSION[$prefix][$name]) ? $_SESSION[$prefix][$name] : null;<br />            }<br />


如果session真的有BUG我想TP的用户早就反应了,他读取任何session都是直接读二维的
我建议楼主先在业务逻辑和session赋值上面找找原因
另外你说有和你一样问题的,不知道方便发些链接不
------解决方案--------------------
检查从数据库取出的数据是否异常
------解决方案--------------------
顶帖留名,坐等PHP BUG报告~~


------解决方案--------------------
貌似没说清楚问题,也没找到原因。
Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn