内容简介:某一天测试提了一个bug,系统进入到某个页面中后,出现登录失效,不管怎么样,只要进入这个页面再点击其他链接就会去到登录页面,测试环境没有问题。因为测试环境没有任何问题,所以怀疑是代码本身的问题,于是在本地测试,发现本地没有问题,于是重新打包部署到正式服务器测试,发现还是出现异常。因为代码和测试环境与本地都是一样的,所以怀疑是数据原因导致登录失效,所以在本地将配置切换到正式环境,发现本地还是没有任何问题,排除这一问题,同时后台也没有任何异常产生,最终追踪到页面,发现页面发出的ajax请求的JSESSIONI
前言
某一天测试提了一个bug,系统进入到某个页面中后,出现登录失效,不管怎么样,只要进入这个页面再点击其他链接就会去到登录页面,测试环境没有问题。
开始解决
第一步:怀疑代码问题
因为测试环境没有任何问题,所以怀疑是代码本身的问题,于是在本地测试,发现本地没有问题,于是重新打包部署到正式服务器测试,发现还是出现异常。
第二步:确认为何会登录失效
因为代码和测试环境与本地都是一样的,所以怀疑是数据原因导致登录失效,所以在本地将配置切换到正式环境,发现本地还是没有任何问题,排除这一问题,同时后台也没有任何异常产生,最终追踪到页面,发现页面发出的ajax请求的JSESSIONID 发生了改变,于是开始排查JSESSIONID 为什么会改变,百度到了2种原因:
一、response调用了reset方法导致登录失效
二、ajax跨域导致登录失效
首先第一个,如果是因为调用reset方法导致登录失效,那么所有的环境理论上都会登录失效,但是为了保险起见,还是检查一下,最后发现并没有地方调用reset方法,所以排除此项。于是检查第二个,但是整个系统并没有跨域,但是为了保险,还是将网上说的方法在ajax请求中添加
beforeSend: function(xhr) { xhr.withCredentials = true; } crossDomain:true,
加上之后发现还是不行,于是以上2种原因被排除
第三步:推测可能的原因
由于搜索到的原因都没能解决,所以只能自己推测具体原因了,因为以上2种已经排除,所以推测可能是因为js清空了cookie,毕竟JSESSIONID是保存在cookie里面的,如果调用js清空了cookie也会导致登录失效,于是在jsp页面中先注释所有js,然后写一个简单的ajax请求,判断JSESSIONID是否改变,测试结果JSESSIONID还是发生了改变,所以也不是js清空了cookie的问题。
事情到了这里,这个bug已经非常诡异了,但是诡异也要解决,于是继续推测:是否是进入页面的时候登录已经失效了,所以新建了一个空的jsp页面,写了一个ajax请求,判断JSESSIONID是否改变,结果发现JSESSIONID没有改变,得出结论:JSESSIONID是在以前的jsp页面中发生的改变,但是不是js导致的,所以开始怀疑HTML,但是HTML理论上不会导致登录失效,所以怀疑是jstl标签导致的登录失效,于是挨个删除jstl标签和表达式,最后发现是输出一个空对象的问题,但是奇怪的时候其他地方输出都没有问题,就那行出了问题,而且测试环境和本地都是空的也没有任何问题,但是的确去掉后就不会出现登录失效的问题了
解决
判断是否为空来进行jstl标签输出后没有问题了,但是本身问题也够奇怪,应该其他地方也没有判断而直接输出的,就不会有问题,偏偏这里有问题,而且也不是说抛出什么异常,而是让登录失效了,因为异常诡异,所以记录下来,另外因为jstl输出空对象不会有问题,所以有时候一旦出问题了就是莫名其妙的问题,看来还是最好选择freemarker这种带强制性的模板引擎比较好,虽然有null就会异常,但是至少会加强非空判断,而且freemaker也可以生成HTML,来加速响应速度
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Vue2.0解决watch对象属性变化监听不到问题
- Intel PAUSE 指令变化影响到 MySQL 的性能,该如何解决?
- Intel PAUSE指令变化影响到MySQL的性能,该如何解决?
- mysql ON DUPLICATE KEY UPDATE 引起自增ID变化的解决办法
- vue笔记-vue项目中对象数组数据变化,但视图未更新的解决方案(待项目细节描述)?
- ReactNative字体大小不随系统字体大小变化而变化
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
免费:商业的未来
Chris Anderson / 中信出版集团 / 2015-10-1 / 35.40
《免费》,这是一个商业模式不断被颠覆、被改写的时代。一种商业模式既可以统摄未来市场,也可以挤垮当前市场——在我们这个现代经济社会里,这并不是一件不可能的事情。“免费”就是这样的一种商业模式,它代表了互联网时代的商业未来。 “免费”商业模式是一种建立在以电脑字节为基础上的经济学,而非过去建立在物理原子基础上的经济学。在原子经济中,随着时间的推移,我们周围的物品都在逐渐升值。但是在字节经济的网络......一起来看看 《免费:商业的未来》 这本书的介绍吧!