servlets - 在响应中的 addCookie 和标头中的“Set-Cookie”之间感到困惑
问题描述
我看到有些人在响应对象中使用 addCookie 来设置 cookie,如下所示
Cookie cookie = new Cookie("name", value);
cookie.setHttpOnly(true);
cookie.setSecure(true);
cookie.setPath("/");
response.addCookie(cookie);
有些人在标题中使用“Set-Cookie”来添加cookie,如下所示
response.addHeader("Set-Cookie","name=" + value + ";Path=/; Secure; HttpOnly");
但是我对这两者都有点困惑,两者有什么区别?我们应该更喜欢使用哪一个。
解决方案
截至今天,由于 Servlet api 4.0 与 SameSite 属性不兼容,我将转向 setHeader/addHeader 解决方案。
此外,所有请求 cookie(如果未设置为 sameSite=Strict/Lax/None; Secure)应通过 addHeader('Set-Cookie',...) 在响应中添加(以避免很快被几乎所有浏览器拒绝) , 如下
boolean firstHeader = true;
String sameSite = RequestUtil.isSecure(request) ? "; SameSite=None; Secure" : "; SameSite=Lax";
for (String header : headers) { // there can be multiple Set-Cookie attributes
if (firstHeader) {
response.setHeader("Set-Cookie", String.format("%s; %s", header, sameSite));
firstHeader = false;
continue;
}
response.addHeader("Set-Cookie", String.format("%s; %s", header, sameSite));
}
如果 response.getHeaders("Set-Cookie") 没有列出所有预期的 cookie,请尝试检查 request.getCookies,并使用它们在响应中添加 Set-Cookie Header。
注意:根据我的理解,response.addCookie 的行为与 response.addHeader("Set-Cookie") 的行为不同确实,使用 addCookie,我无法在响应标头中看到相应的 Set-Cookie...
推荐阅读
- javascript - 无法在没有得到语法或调用未定义函数错误的情况下将 JQuery 添加到 wordpress
- c - fscanf 在文件末尾返回 3 而不是 -1 (EOF)
- intellij-idea - 如何为 IntelliJ 中的所有 Rust/Cargo 测试设置 --nocapture 标志?
- jsf - Primefaces f:facet name="first" and "last" in h:head 不用于订单
- asp.net-mvc - InvalidOperationException:不正确的内容类型:Microsoft.AspNetCore.Http.Features.FormFeature.ReadForm()
- angular - Bootstrap NgbDate 日期范围日历 - “TypeError:无法读取未定义的属性‘等于’”
- swift - 如何检查 Airpods 是否连接到 iPhone?
- forms - React Native - 如何验证文本输入的正确性?
- perl - 如何使用 Net::SMTP::TLS 发送电子邮件附件
- javascript - 在其他组件中使用 react this.state