某项目更新了前端后,无法登录。症状是刚登录进去就退出来。

调试后发现,是用于保存登录token的cookie没有更新。每次登录,从后台拿回来的最新token,并没有更新cookie里。cookie里的token还是旧的,这样的话,到后台请求资源,带上的token还是旧的,系统认为没有登录,于是退出,又回到了登录界面。

更奇怪的是,进一步调试,发现别的cookie都能顺利更新,唯独这个token不行。在浏览器中观察这些cookie,发现token有httponly标志。这代表该cookie无法被javascript操纵,既不能读取,更不能更改或删除,所以就无法被前端脚本所操作,只能是浏览器自己玩。将该httponly去掉,就正常了。

设置cookie的httponly标志,应该是服务器返回所指定。但我们后端代码没有这样的指定。鉴于“token”这个名字,差不多等于系统保留字,猜测是后台调用了其他系统返回所导致,覆盖了我们自己那个。于是将“token”改为“mytoken”,以进一步观察。