前端使用Chrome 84.xxx 版本提交验证码,sessionid每次会被刷新,从而导致提交失败
bug由来,在后台管理系统中,创建一个新平台,需要提交验证码通过后才能创建,这里创建平台的需求不需要关心是啥,业务需求是验证码的提交
这时候会惊奇的发现,哪怕输入的验证码对的,后端也会返回一个验证错误的 code
回来,更离谱,不是每个同事的电脑都会出现这种现象。
后面和后端再沟通,后端排查,给出的原因是前端传的 sessionid
每次都不一样的。
插入一下验证码的大致实现流程,前端从cookie中读取sessionid,然后通过请求头发送sessionid,后端拿到sessionid再去session中比对,如果一致返回成功的
code
。
因为sessionid
和后端session中的作比对,不一致,这显然是不通过的,这时候通过Google找到了一篇类似问题的文章。他们对问题的描述是
问题原因,由于谷歌浏览器的SameSite安全机制的问题,浏览器在跨域的时候不允许request请求携带cookie,导致每次sessionId都是新的
如何解决?
直接在地址栏里输入chrome://flags/,然后在搜索框里搜索关键字SameSite,找到与之匹配的项SameSite by default cookies,将其设置为Disabled,然后关闭浏览器再打开,请求。如此,同窗口session没超时的情况下,每次请求就不会出现后台sessionId不同的情况。
注意:这是在Chrome 84.xxx 版本才有的设置的,后面我升级到最新版本,发现已经没有这些选项的设置,但是sessionid
每次不一致的问题也没有再出现了,其它浏览器暂时没有发现这个问题了