【单点登陆导致cookie覆盖问题】

背景:

使用oauth2.0单点登陆进去不同服务器的同一系统。
同一浏览器存储的COOKIE名称,COOKIE PATH COOKIE DOMAIN一致,会认为是同一个COOKIE
当单点登陆进去c1平台后,前端浏览器会存入一个cookie,而后当单点登陆进入c2平台后,因为COOKIE信息一致,会导致覆盖前面的COOKIE信息,导致前面C1系统登出。
在这里插入图片描述

cookie覆盖的条件:

相同的Cookie名称:如果多次设置具有相同名称的Cookie,后一个Cookie将覆盖前一个Cookie。

相同的路径:如果Cookie的名称相同,但路径不同,它们不会互相覆盖。每个Cookie的路径属性定义了它的有效路径范围。例如,如果一个Cookie的路径为/app1,另一个的路径为/app2,它们不会互相覆盖,因为它们在不同的路径下。

相同的域:如果Cookie的名称和路径都相同,但域名不同,它们也不会互相覆盖。每个Cookie的域属性定义了它的有效域。例如,如果一个Cookie的域为example.com,另一个的域为sub.example.com,它们不会互相覆盖,因为它们在不同的域下。

相同的安全属性:如果Cookie的名称、路径和域名都相同,但安全属性不同,它们也可能不会互相覆盖。具有安全属性的Cookie只会与安全的HTTPS连接一起发送,而没有安全属性的Cookie会在HTTP和HTTPS连接中都发送。

解决办法

了解原因后,有如下方案

1 springboot 项目中application.yml

配置cookiename cookie path,确定cookie唯一,不会被覆盖,但是如果module过多,需要修改的文件也比较多
在这里插入图片描述

2 配置nginx

配置 #proxy_cookie_path / /test;
在这里插入图片描述

可以将不同服务器的nginx上下文配置不一样,通过cookie path确保cookie不会被覆盖,改起来比较简单。

上文配置的nginx【 proxy_cookie_path / /user】表示将请求的cookie path都由默认的 / 挂载在 /user目录下,

细说cookie

cookie的属性
NAME=VALUE 赋予 Cookie 的名称和其值(必需项)
expires=DATE Cookie 的有效期(若不明确指定则默认为浏览器关闭前为止)
path=PATH 将服务器上的文件目录作为Cookie的适用对象(若不指定则默认为文档所在的文件目录)
domain=域名 作为 Cookie 适用对象的域名 (若不指定则默认为创建 Cookie的服务器的域名)
Secure 仅在 HTTPS 安全通信时才会发送 Cookie
HttpOnly 加以限制, 使 Cookie 不能被 JavaScript 脚本访问

如下图为cookie的样例,表示该cookie value存储在192.168.3.82:/user 目录下,如果当浏览器中的cookie只有一个,且cookie path = /user; 192.168.3.82:/test就会拿不到cookie,那么请求的时候不携带cookie,后端服务器认为该请求为第一次访问,后端向前端发起Set-Cookie操作,前端浏览器会在覆盖之前的cookie
在这里插入图片描述

在这里插入图片描述

仅此记录!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值