微信内嵌浏览器sessionid丢失问题
来源:互联网 发布:跑跑卡丁车淘宝买号 编辑:程序博客网 时间:2024/06/05 17:32
现象
微信中打开网页,图形验证码经常提示错误,即使填写正确也会提示错误,并且间歇性出现。
系统前期,用户使用主要集中在pc浏览器中,一直没有出现这样的问题。近期有部分用户是在微信中访问的,才出现的这个问题。
抓包
由于只有在手机微信中出现这种情况,并且手机连的无线与pc不在一个局域网中,所以,只能在pc上用360wifi创建热点(无线),然后手机连接热点,再用wireshark抓360wifi网卡,查看数据。
一个页面中的,带着sessionid发送的多次请求,响应中的sessionid会被重置,具体来说就是cookie中的信息是set-cookie:jessionid=xxxxx,并且这个set-cookie的jsessionid也不同
分析
经过测试发现
1、sessionid丢失只在微信中打开网址时才会出现,尤其在安卓的微信中,丢失次数最多,iphone中几乎不出现。
2、在手机非微信中打开,比如手机浏览器,不会出现sessionid丢失
3、在pc浏览器中,不会出现sessionid丢失
推理论证
至此,怀疑是服务器没做session保持,经查证,服务器有2个tomcat,都放在腾讯云上,做了黏性session,黏性session是通过hash ip,然后取余做的,所以怀疑是黏性session不起作用。
为了验证这个猜测,通过不断request,发现request一会到server1,一会又到server2,而且没有规律可循。由于手机的ip是固定的,并且腾讯云坚持他们的黏性session没有问题,所以推测ip在中间传输过程被修改了。经过在服务器上抓包发现,腾讯云收到的ip的确是变化的。经过以上的验证加上网上search,原来凶手是微信内嵌浏览器对所有请求都做了代理,从而导致腾讯云收到的ip发生了变化。
解决
由于微信内嵌浏览器对所有请求都做了代理,导致出去的ip不固定,从而导致腾讯云服务器的黏性session(基于客户端ip做的黏性session)失效。所以,解决方案有两个,要么服务器端只用一台tomcat,要么tomcat做session共享,比如
session放在redis中。这样server1产生的sessionid,即使到了server2,也能从redis中找到。
- 微信内嵌浏览器sessionid丢失问题
- sessionID 问题
- sessionid为什么关闭浏览器消失
- 关闭浏览器,保存sessionId的方法
- sessionid在各个浏览器内的差异
- SessionId
- SessionID
- 解决在IE8浏览器里,在同一个IE进程中的不同选项卡之间的sessionID共享问题
- IE浏览器iframe跨域丢失Session问题
- java下载文件名,浏览器弹出框中文件名丢失问题
- PHP关于session浏览器丢失的相关问题
- Asp.Net中SessionID总是变化问题
- lr 动态sessionId处理引发的问题
- 跨域访问sessionid不一致问题
- 关于web项目sessionID欺骗的问题
- 用户浏览器禁用了cookie,SessionID如何传递
- 修复迅雷在 IE 等浏览器中右键菜单丢失或失效的问题
- Missing e浏览器扩展功能或引起数据丢失、隐私暴露等问题
- Maven+SpringMVC3+MyBatis+FreeMarker
- android基础(四)
- Java自然排序(个人总结-求赞)
- Eclipse 安装 activiti 插件 失败 An error occurred while collecting items to be installed
- mongoDB学习笔记 索引
- 微信内嵌浏览器sessionid丢失问题
- iOS开发零基础教程之证书、描述文件、App ID的解释
- OpenCV2.4.13+VS2012开发环境配置
- JavaScriptCore框架介绍
- android:layout_gravity和android:gravity的区别
- ReactNative Demo - ImageVIew 使用
- 《创业》创业分析
- 整形数组合并
- linux常用命令