被踢出去的用户

2018-08-03 11:38:06 作者:ThoughtWorks中国

0

在还没有掌握全部证据之前就下结论会犯严重的错误,会使判断带有偏见。——《血字的研究》

“齐识,路老板又来邮件了。”白娜一脸无耐地说。

“一定没好事吧?”齐识回头看了一眼,手依旧在快速敲着代码,并没有停。

“你刚从泰国回来?”齐识说到。

“你怎么知道?”白娜瞪着眼睛一头雾水。她清明假期去泰国玩这件事,并没有告诉任何同事。

“你脸明显比节前黑了,说明去了热带地区玩。你戴的耳环以前没看到过,说明是假期新买的。耳环上刻着大象……”,齐识停下敲代码的手,回过头,“说明你去了视大象为国宝的泰国。”

“你……牛……,不愧是程序员名侦探……”。

“说吧,又出什么事了?”齐识回到显示器前继续敲代码。

“还是用户被踢出去的那个问题。”

“上次不是已经查清楚了吗?是低版本IE的锅。”

“可是,这次是IE 11……”

“哎——”齐识长叹一声,“好吧,把邮件转给我。”

“已经转给你了。拜托了,我去开会了哈。”

齐识很不情愿地将界面从IDE切换到网页,打开了邮件。这是一封几经转发的邮件,一开始是路老板的用户向路老板抱怨系统用着用着就自动登出了你们这什么烂系统,路老板回复说可能是低版本IE的锅爸爸请考虑升级IE或换其他浏览器。客户说老子TM用的就是最新版IE你是不是在玩老子,于是路老板转发给项目经理白娜说今天必须解决否则炒了你们整个团队。最后白娜转发给齐识,只有三个字母:FYI……

很麻烦。这个问题以前也出现过几次,一直没有找到具体原因。上一次时发现用户用的是IE 8,而当时系统支持的IE最低版本是9。当所有人都焦头烂额束手无策的时候,这位超级英雄背锅侠IE站了出来。果不其然当用户换了其他浏览器后,就再也没有出现过类似问题了。

但这次,背锅侠说这锅老子不背了。

齐识看了看表,上午11点。不知道要为这个问题加班到几点。

他先打开了日志分析工具,按照用户名查询与该用户有关的日志。永远不要相信一个不懂电脑的用户所描述的事实,所有的信息都要再次确认。但这次事实似乎很无情无义无理取闹,这个用户用的确实是IE 11。

通过日志,可以看到这个用户所有的访问记录:他先是登录系统,打开几个页面,然后到了文件管理子系统,找到某个文件夹,上传了一个文件,然后就登出了。如果用户描述属实的话,这次登出请求不是他主动触发的,是系统自动把他踢出去了。

“用着好好的,怎么就被踢出去了呢?”齐识自言自语道。

“怎么了大侦探,愁眉苦脸的。”老夏端着泡了枸杞的保温杯路过。现在是11点半,这杯应该是第三泡。老夏以前也是项目上的大牛,后来不知怎的,去了培训部专门做员工培训了。不过他时不时还是会到研发部这边溜达溜达,从背后窥探一下别人的屏幕,指出代码上的一些问题,然后哈哈一笑扬长而去深藏功与名。

“用户又被自动踢出去了。”齐识说。

“又是那个问题?不是IE的锅吗?”

“看来我们有可能冤枉IE了,这次用户用的是新版本IE,按理说我们的前端是肯定支持的,也在测试环境验证过无数遍了。”

“这就怪了。这几次出问题的用户,是不是都用的IE?”

“是的。”

“那就还是IE的锅。”老夏吸溜了一口枸杞茶,走了。

他看似不经意的一句话,反倒提醒了齐识。他立马继续查询日志,找出几个用不同浏览器的用户,他们的各种操作错落有致,最后的登出请求也并无破绽。只有一些IE用户,他们的登出请求是在上传完文件之后发生的。难道是上传文件的后台接口出了问题?但不同浏览器产生了不同的行为,这现象又 不像是后台的事儿啊。齐识一看表,已经12点半了。得了,先去吃饭吧。

1

……权衡点滴证据,做出不同的假设,把它们进行对比,最后再确定哪几点是重要的、哪些是不真实的…… ——《巴斯克维尔的猎犬》

草草吃完,买了杯咖啡,齐识又坐到了电脑前。像这种线上问题,尤其是本地无法复现的线上问题,是他最喜欢的。定位这些问题的过程,就像是侦探在探案,从最初的案件出发,将看似毫无关联的线索逐一梳理过滤,那最终唯一的真相也会慢慢浮出水面。每到这时,齐识就会感觉像是个超级英雄一样拯救了世界。这样的问题解决得多了,同事们给他起了个外号,叫“程序员侦探”。他倒也不介意别人这么叫他,反倒有点自豪。

但这次用户被踢出的问题,齐识前前后后处理过三次,都无法定位。按照目前系统的实现,用户自动登出可能是因为网站的登录cookie过期且SSO上的登录cookie也过期,这时当某个请求到达后台时,会清空所有与认证有关的cookie并重定向到SSO的登录页面。登录cookie的有效期是20分钟,但用户抱怨的是刚登录不久就被自动踢出,从日志上看也的确如此。所以“登录cookie过期”的不在场证明相当完美。

另外的可能就是缓存挂了。每个请求到达后台时,都会到服务器缓存中取出在用户登录时存储的一个token,将之与请求所携带的cookie中的token比较,如果不相符就自动登出。之所以这样做是考虑用户的安全,将伪造或窃取cookie登录的黑客拒之门外。如果存储或读取缓存失败,自然也会自动登出。齐识以前在读写缓存的地方加了很详细的日志,并没看到任何错误发生。“缓存”作案的可能性也不大。

最后一个嫌犯是心跳请求。网站前端每隔2分钟会自动向后台发一个心跳请求,如果服务器发现本次心跳与上一次心跳间隔时间超过3分钟,就认为用户已处于不活跃状态,自动将其登出。这么做也是为了用户安全,比如将所有网站页面关闭,3分钟后再次打开,将会自动跳转到登录页面。如果心跳请求没有发送成功,下次请求到来时很可能已经超过了3分钟,就会把用户踢出去。心跳请求可以在Web服务器的日志中查到,每次请求都是成功的。所以,“心跳”的嫌疑似乎也撇清了。

就在上一次处理这个问题时,齐识偶然发现请求日志里显示的UserAgent是网站不支持的IE 8。使用系统不支持的浏览器,任何诡异的事情都可能发生。当用户升级了IE或使用了其他浏览器后,问题不再发生了。但是这一次,为什么新版的IE也不行了呢?

现在,齐识的目光集中在了上传文件的后台API上。这是这次发现的新嫌疑人,不,还有IE,可能是团伙作案。现在掌握的最新线索是,用户使用IE,不管什么版本,在上传完文件后,被自动登出。对于IE这种惯犯,不容易找出它的破绽,所以齐识决定先从API下手。

2

在没有事实作为参考以前妄下结论是个很大的错误。主观臆断的人总是为了套用理论而扭曲事实,而不是用理论来解释事实。——《波希米亚丑闻》

两个小时过去了,还是没有任何进展。上传文件的API若无其事地待在那里,一脸蔑视地看着齐识。

“有新的线索吗?”老夏又端着保温壶过来了。现在是下午3点,壶里应该泡上了新茶。老夏喜欢在午饭后泡一壶酽茶。

“今天的普洱味道如何?”齐识问。

“不是普洱,是正山小种。”

“咦?红茶应该是周四泡的啊,今天周三应该是普洱才对。”

“这个嘛,突然就想喝红茶了,呵呵。”老夏说完吐了吐茶沫。“你有不错的洞察力,总是能发现别人不太在意的事情。但有时候,根据那些事实并不能推理出你的结论。有些事情之间的关联可能很偶然,并不具备规律性。”老夏微笑地看着齐识,“现在情况如何?”

“我现在在看上传文件的API。我发现每次用户调用完这个API之后就会被踢出去。”

“哦?有意思,这个API做了什么见不得人的事了吗?”

“并没有。我已经检查了它和它所调用的所有方法,甚至还看了它本身的filter和全局filter,并没有任何地方会清空cookie或者token缓存。只有清空这些才会自动登出。”

“对了,你是怎么发现调用完这个API后会被踢出的?”老夏接着问。

齐识调出了某个用户所有请求日志,定位到上传文件的请求。“你看,这个POST请求是上传文件,后面这些就是登出请求了,而前面的都是一些文件夹跳转的请求。这是其中一个用户的请求,这里还有其他用户。”说着,齐识又开了几个窗口,平铺在了显示器上。

“有意思。”老夏眯缝着眼睛紧盯着屏幕。“虽然他们都是上传完文件就被踢出了,但能确定就是上传文件的API导致的吗?是每次上传完文件都会登出吗?”

“还真不是!”

“而且别忘了IE,只有IE才会踢出用户不是么?那就更能洗清后台API的嫌疑了。”

“对啊老夏,我怎么没有想到?”齐识茅塞顿开。

“就像我连续两周都是周三喝普洱周四喝红茶,你认为那是某种必然。但这是你的主观臆断。主观判断一定要有事实作为依据,否则就都是臆断。”老夏说着,拿起茶壶晃晃悠悠地走了。

“等等,老夏,别走啊,我需要你!”

“我还有事。”老夏回过头冲齐识眨了眨眼睛说,“等你再需要我的时候我自然会出现的。”

3

他的表情不再那样淡漠,我看到他炯炯有神的双眼迸射出智慧和兴奋的光芒。——《格兰奇庄园》

齐识的目光又聚焦在了日志身上。如果用户真的在上传文件之后被踢出,一定能从日志中找到什么蛛丝马迹。齐识又换了一个留下的操作日志较多的用户,将日志按时间排好序。这个是登录成功的请求,这个是进入文件管理子系统的请求,这个是进入某个文件夹的请求,这个是心跳请求,然后上传文件,成功了,然后跳转到其他文件夹,继续上传文件,又发了个心跳,看看离上次心跳的间隔,嗯,2分钟,没有任何问题。齐识点击进入了下一页日志。

又进入了另一个文件夹,还是上传文件,成功了,然后……就登出了。这里面一定有什么猫腻。

齐识揉了揉眼睛,将所有注意力都集中到这几行日志身上,仿佛要看穿这屏幕,看到屏幕那头的另一个镜像的宇宙。

相关阅读
如果,能够重来一次

我玩微博,喜欢在上面写些心事。因为这儿没人知道我是谁,我可以尽情吐露心里的秘密。

红颜丑女

迷踪山下,苦竹林旁,一婷婷竹屋淡然独立。 来此迷踪山脚独居已二载,倾城早已习惯形影相吊的日子,每天日出而出,日落而卧,清贫有余,但没有了市井之人的污言秽语,来此独居确实是一个正确的选择。 十八年前,慕容府天降异象,百花盛开,群鸟长鸣。与此同时,十月怀胎难产三日的慕容夫人终于诞下一女婴,出生未哭,双目炯炯有神,肤若凝脂,眉目含雪,众人皆说日后必将是一个倾国倾城的美人坯子。慕容老爷高兴之余,灵感...

坚持还真的就是胜利

1.动漫里的坚持 关于抗战片里我最熟悉的两句话,第一句是,革命尚未成功,同志仍需努力。第二句是,坚持就是胜利。 这两句话带点打鸡血的味道,但到底靠不靠谱呢? 我们小时候都看过日本的动画片,什么七龙珠,火影忍者之类的。男主角碰到的对手一定是比他强的,男主角一开始会被虐的各种惨,我们看的也揪心。 一直到男主角被打的已经血肉模糊,奄奄一息的时候,男主角依然咬牙要坚持从地上站起来面对敌人。 到最最最...

与爱共撷

猫猫没有输,她只是爱上了一个不会爱上她的人……

对不起,你不是我母亲

周亚男开了培训机构。但她没想到雇佣的这个保洁员,竟是从小就抛弃自己出走的母亲。

一个产品经理的美国居住日记:美国爱国主义基地长啥样

有个大兵腿长又走得飞快,儿女妻子一路小跑跟着。之前还以为这大兵爸爸平时都这样,后来才知道,今天他是主角,后面有戏份哦。

对付女情敌的10种方法 轻松搞定男神

对付女情敌的方法有很多,女性的情敌往往要比男性的情敌更加令人头疼,因为女人们的思想和心机是旁人都无法预测的,那么对付女情敌都要哪些有用的方法呢?首先,对男方要追

想让他主动靠口说爱你,这些表白套路少不了

当女生喜欢一个人的时候一般不会主动开口,她们会等到男生也喜欢自己的时候再表明自己的心意。但是有些男生非常木讷,通常需要等很长一段时间才告白。那么你知道怎样

手机读故事网©2019