中国领先的IT技术网站
|
|

PHP跳转后Session丢失值的处理方法

其实此时此刻我并不知道造成这个错误的深层原因是什么,也不知道问题被解决的具体道理,只是先把这种异常情况记录一下,以防有人跟我一样被折磨过长时间。

作者:佚名来源:IT技术网|2017-09-12 08:31

【沙龙】51CTO诚邀您9月23号和多位技术大咖一起聊智能CDN的优化之路,抓紧时间哦!


其实此时此刻我并不知道造成这个错误的深层原因是什么,也不知道问题被解决的具体道理,只是先把这种异常情况记录一下,以防有人跟我一样被折磨过长时间。

这个问题是在我做一个腾讯微博授权绑定功能时出现的。

我希望在微博授权完成后使用session记录token信息,然后在创建关联账户时会用到这个session,期间不可避免的会页面跳转。然后问题出现了,页面在跳转后,session丢失了,而且也不是全部丢失,因为我在session中存的是一个数组,最后发现数组的key都还在,只是value不见了,而且最诡异的就是,其他地方的session都是可以正常传递的,只是某一个方法不行。我查了一些资料,对比了php.ini的配置,也使用了session id,但是都没有解决问题,最后决定从源头入手,回头看了一下设置session的地方....

  1. .... 
  2. $key = get_qq_token($_GET["code"], $_GET["state"], $_SESSION["URI"]); 
  3. if($key['access_token'] !== false){ 
  4. $_SESSION['qq_keys'] = $key
  5. $me = get_qq_user_info($key['access_token'], $key['openid']); 
  6. .... 

我发现了设置session后调用的那个取user信息的方法,这个方法使用的是php的curl函数类,向指定的url发请求。然后开始怀疑“是不是在这里session的值被处理掉了,不知道curl_close 这个方法会不会把当前的session值都会清空”,如前所述,原因我现在也不知道,但是这个怀疑确实帮我解决了问题,于是我把session设置延后到调用方法以后,即

  1. $me = get_qq_user_info($key['access_token'], $key['openid']); 
  2. $_SESSION['qq_keys'] = $key

结果问题真的解决了,session正常传递到跳转页面。虽然不知道原因,但是也许可以记住一个窍门儿:session要在curl请求之后设置,中间穿插curl请求会使session丢失。这个结论有待进一步考证。

【编辑推荐】

  1. Linux系统值得一看的学习方法及路线图
  2. IBM Bob Picciano:抛弃旧方法,用新科技重塑高性能计算
  3. 改善数据中心性能的三种方法的比较
  4. 机房精密空调低压报警与故障维修方法
  5. PHP-MSF:基于Swoole的工程级企业微服务框架
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

视频课程+更多

热门职位+更多

读 书 +更多

网管第一课——计算机网络原理

本书是《网管第一课》系列图书中的第一本,是专门针对高校和培训机构编写的,其主要特点是内容细而精、针对性强。书中内容全是经过精心挑选...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊
× 学习达标赢Beats耳机