BUG 描述
设置 Cookie 过期之间为 0 (立即失效) 时,Cookie 并没有失效,同时设置多个 Cookie 时,出现只有部分 Cookie 生效的问题
代码
由于想手动指定 SameSite 避免浏览器警告,因此设置 Cookie 使用了以下代码
ResponseCookie responseCookie = ResponseCookie.from(key, value)
// 设置 HttpOnly
.httpOnly(true)
// 设置 SameSite 为 Lax,不依赖浏览器默认行为
.sameSite("Lax")
// 设置 Cookie 路径为网站根路径
.path("/")
// 设置过期时间(单位:秒)
.maxAge(maxAge)
// 为 https 访问开启 secure
.secure(request.isSecure())
.build();
// !!此处有错误!!
response.setHeader(HttpHeaders.SET_COOKIE, responseCookie.toString());
错误原因
response.setHeader()
方法将Set-Cookie
请求头错误的覆盖掉,导致Cookie
设置不生效,将response.setHeader()
修改为response.addHeader()
后代码正常。
由于实际环境中,混合使用了response.addCookie()
方法,导致该问题非常难排查,在近期将 Cookie 设置抽取成工具类后,此问题影响变得严重才发现问题