同IP不同端口导致cookie冲突的解决方法
一、项目背景
1、技术栈
springboot、springcloud、vue、gateway、springmvc、k8s、jwt等
2、问题描述
一个k8s集群服务器上搭建了多个项目,端口不一样,同时启动访问时token丢失。如:A,B两个服务,在浏览器中登录访问A后,当前打开的浏览器上在开一个选项卡访问B服务后,回过来点击访问A时token丢失,需要重新登录A才可以访问。经过资料查找,发现问题是因为: IP相同认为是同一个域,接收了B的token,把对应的cookie内容覆盖了,其中包括jsessionid,造成A的token丢失。如果IP不同,则不会发生这个问题。IP相同的两个cookie是一样的,而不幸的是token就保存在cookie中,这样先访问A,再访问B的时候,B的token会覆盖A的token。这个事情没办法解决,所以你不要搞两个端口,最好是搞两个IP。原来都是cookie惹的祸,它不会区分端口,造成这多个站点不断的后来的覆盖前面的,从而造成cookie的丢失。
二、解决办法
直接在前端把A、B两个项目的token的名称改成不一样,如下:
#A 项目:
const TokenKey = 'Admin-Token'
const ExpiresInKey = 'Admin-Expires-In'
#B 项目:
const TokenKey = 'Admin-B-Token'
const ExpiresInKey = 'Admin-B-Expires-In'