在***项目中,手机端使用账户A登录进入app,查看模块B的内容XX,显示正常,查看模块C的内容XXX也显示正常,然后进入模块D事件办理,获取事件列表,正常,但是选择办理的时候,调用接口E,一直提

最终解决方案:
经过排查,发现问题是,调用获取事件列表接口,有个字段为图片,返回的为空字符串,手机端未做判断,强行加载图片,导致PHPSESSID发生变化,服务端主动清空cookie,用户信息失效,TOKEN验证失败,解决办法,手机端判断,图片字段如果为空,则不加载。

解决问题过程描述:
1).TOKEN失效,首先想到的是session_id发生变化,有跨域请求,于是,在登录接口、模块B对应接口、模块C对应接口、模块D对应接口、事件办理接口E打印session_id已经相关的session信息,结果是登录接口、模块B对应接口、模块C对应接口、模块D对应接口session_id值、相关的session信息均正常,值一致,但是接口E,session_id值、相关的session信息均为空

2).根据1)的结果,判断并没有发生跨域请求,猜测应该是手机端做某个操作时候,触发服务端session验证函数,清空了session,于是服务端session验证接口打印日志信息,结果显示,手机端连续操作过程中,某个时间节点,PHPSESSID发生变化,cookie被清除,但是具体什么操作,还是无法辨别出来

3).综合1)、2)的情况,分析可能手机端做了清除cookie的操作,仔细排查并没有

4).本来没办法了,但是和手机端同事沟通过程中,了解到他们处理图片资源时候,有时候不管资源是否存在,都会加载资源,于是想到如果图片路径为空,手机端未做判断,强行加载图片,相当于直接访问一次:http://ip:port, http://ip:port 该接口默认重定向到PC后台首页,而且该接口有做session验证,判断session_id() 与$_COOKIE['PHPSESSID'] 是否相等,如果不相等,则清除所有cookie,并退出,手机端初次登录,会生成PHPSESSID1,进入事件详情页面,强行加载空图片,会生成PHPSESSID2,因为PHPSESSID1 != PHPSESSID2,故cookie被清空,保存在session中的用户信息也被清空,所以调用接口E,一直提示TOKEN失效,到此,问题才水落石出!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值