Http请求Cookie失效问题记录
一、问题现象
在开发功能的过程中,业务依赖cookie进行取之,项目进行交互时会对前端http请求携带的cookies进行解析操作,但在自测调试对过程中出现账户的授权失效的报错问题。
二、问题排查
用arthas
进行代码方法报错排查,一步一步排查到当请求打到服务器时会被一个TokenFilter拦截,在其中会在中间价取到用户上下文,用户在登录的时候会在中间件设置上下文,并在http响应中设置rsid为对应业务数据形式,如:rsid_1:2_1245652125fsadfau
在请求业务服务器时,拦截会读取http请求中的cookies中的rsid值进行跟传来的token进行对比,如果不一致就会校验失败,出现上方的报错现象。
一开始以为是rsid设置的有误,就在用户登录的接口进行排查,发现确实是set上的rsid相关的业务数据,查看浏览器cookies设置也是成功的:如下图,but只针对主账户是成功的,其rsid数据例如:rsid_1_25672jrfanf
针对子账户则并非如此,发现其rsid对应的值为空:
登陆接口其实在响应中也设置返回了cookies给前端
那理论上应该是会设置成功的,那为什么会value为空呢???
在经过排查时,发现cookies对应的value不能有对应的特殊字符
当出现特殊字符就会被替换成空串
询问GPT:
三、总结
在cookies的使用中,要符合对应的使用规范,避免开发中出现问题;
业务解决方案:将 :
替换为 ^
请求不再报错,符合功能业务