最近陆续有用户反馈在我们网站上登录时遇到登录死循环问题。输入用户名与密码提交后,显示登录成功,但跳转到目标网址后(由于依然处于未登录状态)又跳转回登录页面,再次登录,再次这样。。。就这样一直循环,怎么也登录不进去。

排查了几天,从我们自身的角度实在找不到线索。昨天不得不把怀疑的目光转向阿里云负载均衡 —— 可能是负载均衡的某种网络问题造成浏览器没有接收到有效的登录Cookie,换个负载均衡试试。我们联系了持续被这个问题困扰的用户,得知她用的是联通的线路上网的,于是我们创建了新的负载均衡,将联通线路的请求解析到这台新的负载均衡,结果那位用户遇到的问题竟然神奇地解决了。当时我们想可能是因为部分联通用户的线路与登录站点所用负载均衡之间的某种网络问题。

今天,我们在闪存上发现还有用户遇到这个问题,心想可能其他线路与登录站点的负载均衡也有某种网络问题,干脆将所有请求都切换到昨天新创建的负载均衡。在切换后,在偶然的情况下,我们自己的一台电脑也遇到了这个问题。我们立马看了一下登录后负载均衡返回的Cookie,意外地发现负载均衡竟然把后端服务器返回的Cookie修改错了,改成了:

正常的Cookie应该是这样的:

也就是负载均衡在植入Cookie时将以下形式的字符串:

".CNBlogsCookie={XXX}; domain=.cnblogs.com; path=/; HttpOnly.Cnblogs.AspNetCore.Cookies={YYY}; domain=.cnblogs.com; path=/; HttpOnlySERVERID={ZZZ};Path=/"

错误地改写为下面的字符串(不知道是不是代码中指针惹的祸):

".CNBlogsCookie=; domain=.cnblogs.com; expires=Mon, 11-Oct-1999 16:00:00 GMT; path=/; HttpOnlySERVERID={ZZZ};Path=/"

负载均衡修改Cookie是由于我们开启了负载均衡的会话保持,并且选择了“植入Cookie”的Cookie处理方式。

我们“幸运”地遭遇这个问题,可能是因为我们的登录站点在返回Cookie时稍有特殊——返回了2个Cookie,一个是用于ASP.NET站点,一个是用于ASP.NET Core(我们目前正在进行ASP.NET Core迁移工作),正好触发了这个隐藏的bug。

云计算之路-阿里云上:负载均衡错误修改Cookie造成用户无法登录的更多相关文章

  1. 云计算之路-阿里云上-容器难容:容器服务故障以及自建 docker swarm 集群故障

    3月21日,由于使用阿里云服务器自建 docker swarm 集群的不稳定,我们将自建 docker swarm 集群上的所有应用切换阿里云容器服务 swarm 版(非swarm mode). 3月 ...

  2. 云计算之路-阿里云上:启用Windows虚拟内存引发的CPU 100%故障

    今天上午11:35~11:40左右,由于负载均衡中的两台云服务器CPU占用突然飚至100%,造成网站5分钟左右不能正常访问,请大家带来了麻烦,请谅解! (上图中红色曲线表示CPU占用) 经过分析,我们 ...

  3. 云计算之路-阿里云上:SLB会话保持的一个坑

    冒着被大家厌烦的风险,今天再发一篇“云计算之路-阿里云上”.这是在前一篇发过之后真实发生的事情,我们觉得定位问题的过程值得分享.而且估计园子里不少朋友被这个问题骚扰过,我们有责任让大家知道问题的真正原 ...

  4. 云计算之路-阿里云上:禁用Windows虚拟内存引发的重启

    昨天(2013年8月6日)下午,承载www.cnblogs.com主站的两台云服务器分别自动重启了1次,由于这两台云服务器使用了负载均衡(SLB),重启并未影响网站的正常访问. 与这次重启相关的Win ...

  5. 云计算之路-阿里云上:愚人节被阿里云OCS愚

    今天是愚人节,而我们却被阿里云OCS愚,很多地方的缓存一直不过期,造成很多页面中的数据一直不更新.这篇博文将向您分享我们这两天遇到的OCS问题. 阿里云OCS(Open Cache Service)是 ...

  6. 云计算之路-阿里云上:Web服务器遭遇奇怪的“黑色30秒”问题

    今天下午访问高峰的时候,主站的Web服务器出现奇怪的问题,开始是2台8核8G的云服务器(ECS),后来又加了1台8核8G的云服务器,问题依旧. 而且3台服务器特地使用了不同的配置:1台是禁用了虚拟内存 ...

  7. 云计算之路-阿里云上:从ASP.NET线程角度对“黑色30秒”问题的全新分析

    在这篇博文中,我们抛开对阿里云的怀疑,完全从ASP.NET的角度进行分析,看能不能找到针对问题现象的更合理的解释. “黑色30秒”问题现象的主要特征是:排队的请求(Requests Queued)突增 ...

  8. 云计算之路-阿里云上-新发现:又一种与虚拟内存有关的CPU波动情况

    在云上真是无奇不有,昨天偶然间发现在IIS的应用程序池回收设置中,仅仅设置了一下基于虚拟内存限制的回收,就引发了CPU有规律的波动.在这篇博文中,我们将向大家汇报一下云计算之路上的这个小发现. 在之前 ...

  9. 云计算之路-阿里云上:原来“黑色0.1秒”发生在socket读取数据时

    在昨天的博文(云计算之路-阿里云上:读取缓存时的“黑色0.1秒”)中我们犯了一个很低级的错误——把13ms算成了130ms(感谢陈硕发现这个错误!),从而对问题的原因作出了错误的推断,望大家谅解! 从 ...

随机推荐

  1. appledoc导出iOS代码文档的使用和问题详解(干货篇)

    appledoc导出iOS代码文档的使用和问题详解(干货篇) 1. 简单说一下背景和自己感受 背景: 项目好像突然黄了,公司让详细写项目代码的注释并且导出文档,弄完之后就要封版. 说实话:听到这个消息 ...

  2. JDBC(上)

    1. 课程回顾 mysql加强 1)数据约束(表约束) 默认值: default 默认值 非空:   not null 唯一: unique 主键: primary key (非空+唯一) 自增长: ...

  3. shell 之时间戳

    vim 1.sh #/bin/bash##by cc read -p "Please input yourtime:" timea=$timeif [ $a != 0 ] then ...

  4. 关于binary log那些事——认真码了好长一篇

    本文介绍binlog的作用以及几个重要参数的使用方法,同时通过实验来描述binlog内部记录内容:row .statement跟mixed的设置下,记录了哪些东西,最后会简单介绍下binlog ser ...

  5. Android Weekly Notes Issue #249

    Android Weekly Issue #249 March 19th, 2017 Android Weekly Issue #249 本期内容包括: 一个设计的实现Demo讨论; Kotlin的C ...

  6. 兼容主流浏览器的js原生函数封装

    1.获取和修改垂直滚动条的滚动距离 //获取滚动条滚动距离function getScrollTop(){ var fromTop=document.documentElement.scrollTop ...

  7. python多版本的pip共存问题解决办法

    python pip 多版本 问题情景 最开始学python的时候用的是py2,且一直用pip来安装库函数.后来py3出来了,所以就装上了,但是一装上出问题了,主要有两个主要的问题.下面将详细说明. ...

  8. xlwt 格式控制

    Examples Generating Excel Documents Using Python’s xlwt 使用Python的xlwt生成Excel文档示例 Here are some simpl ...

  9. 老李分享:Android性能优化之内存泄漏1

    老李分享:Android性能优化之内存泄漏   前言 对于内存泄漏,我想大家在开发中肯定都遇到过,只不过内存泄漏对我们来说并不是可见的,因为它是在堆中活动,而要想检测程序中是否有内存泄漏的产生,通常我 ...

  10. 在多个Activity中回传值(startActivityForResult())

    业务逻辑: MainActivity打开A,A打开B,B把值传回MainActivity.适用在多个Activity中回传值. 实例:微信中选择国家-->省份-->城市的实现 实现方式分析 ...