Jetty - httponly cookie 未保存在嵌入式码头 11 中的浏览器中
Jetty - httponly cookie not being saved in browser in embedded jetty 11
在我的网络应用程序中,我以这种方式设置响应 cookie:
Cookie testCookie = new Cookie("test", "mycookie");
testCookie.setHttpOnly(true);
testCookie.setPath("/");
testCookie.setMaxAge(3600);
testCookie.setSecure(true);
response.addCookie(testCookie); // Response is of type HttpServletResponse
执行请求的客户端在本地主机中是 运行。
当我查看 chrome 中的请求时,我看到该 cookie 选项卡并看到该 cookie 已收到,但当我查看应用程序-> 时,我在 chrome 中找不到该 cookie Cookie 选项卡和我在此完成后执行的其他请求,请勿发送 cookie。
此外,在码头 11 中,我似乎无法设置 cookie 的 SameSite 属性。
我如何设置此 cookie?httpOnly cookie 在 chrome 的“应用程序”选项卡中不可见是否正常?我如何验证它是否已设置?
编辑:
其他详细信息
我是 运行 https://localhost 中的客户端,服务器使用带有自签名证书的 https。
从响应中我收到的 cookie 似乎是正确的,但 chrome 似乎没有保存它。
我们的经验是 Chrome 将 reject/drop 任何 Set-Cookie
没有 SameSite
值集。
Jetty 11 中的行为...
jakarta.servlet.http.Cookie
没有 setters/getters 的“SameSite”(这是下一个 Servlet API 版本的特性)。
- 默认情况下,
ServletContext
属性 org.eclipse.jetty.cookie.sameSiteDefault
包含 SameSite
cookie 属性的默认值。 (使用值 None
、Strict
或 Lax
之一)。如果未设置此属性,您的 cookie 将不会提供 SameSite
值。
- 您可以在 Jetty 中使用 cookie 注释配置
SameSite
和 HttpOnly
以控制特定的 Cookie SameSite
行为。
示例:
Cookie testCookie = new Cookie("test", "mycookie");
testCookie.setHttpOnly(true);
testCookie.setPath("/");
testCookie.setMaxAge(3600);
testCookie.setSecure(true);
testCookie.setComment("__SAME_SITE_LAX__");
// This can be __SAME_SITE_NONE__, or __SAME_SITE_STRICT__, or __SAME_SITE_LAX__
response.addCookie(testCookie);
在您的浏览器中评估这些更改时,首先确认 Set-Cookie
响应 header 是您想要的,然后查看应用程序选项卡。
请注意,Chrome 对 IP 地址、单标签域和保留主机名(如“test”或“localhost”等)的域名有大量特殊规则。这些对于TLS/SSL、SameSite、COR、Preflight 请求等。在测试时避免使用其中任何一种,尽可能使用完全限定的主机名,否则您会对这些规则感到惊讶。
在我的网络应用程序中,我以这种方式设置响应 cookie:
Cookie testCookie = new Cookie("test", "mycookie");
testCookie.setHttpOnly(true);
testCookie.setPath("/");
testCookie.setMaxAge(3600);
testCookie.setSecure(true);
response.addCookie(testCookie); // Response is of type HttpServletResponse
执行请求的客户端在本地主机中是 运行。
当我查看 chrome 中的请求时,我看到该 cookie 选项卡并看到该 cookie 已收到,但当我查看应用程序-> 时,我在 chrome 中找不到该 cookie Cookie 选项卡和我在此完成后执行的其他请求,请勿发送 cookie。
此外,在码头 11 中,我似乎无法设置 cookie 的 SameSite 属性。
我如何设置此 cookie?httpOnly cookie 在 chrome 的“应用程序”选项卡中不可见是否正常?我如何验证它是否已设置?
编辑: 其他详细信息 我是 运行 https://localhost 中的客户端,服务器使用带有自签名证书的 https。 从响应中我收到的 cookie 似乎是正确的,但 chrome 似乎没有保存它。
我们的经验是 Chrome 将 reject/drop 任何 Set-Cookie
没有 SameSite
值集。
Jetty 11 中的行为...
jakarta.servlet.http.Cookie
没有 setters/getters 的“SameSite”(这是下一个 Servlet API 版本的特性)。- 默认情况下,
ServletContext
属性org.eclipse.jetty.cookie.sameSiteDefault
包含SameSite
cookie 属性的默认值。 (使用值None
、Strict
或Lax
之一)。如果未设置此属性,您的 cookie 将不会提供SameSite
值。 - 您可以在 Jetty 中使用 cookie 注释配置
SameSite
和HttpOnly
以控制特定的 CookieSameSite
行为。
示例:
Cookie testCookie = new Cookie("test", "mycookie");
testCookie.setHttpOnly(true);
testCookie.setPath("/");
testCookie.setMaxAge(3600);
testCookie.setSecure(true);
testCookie.setComment("__SAME_SITE_LAX__");
// This can be __SAME_SITE_NONE__, or __SAME_SITE_STRICT__, or __SAME_SITE_LAX__
response.addCookie(testCookie);
在您的浏览器中评估这些更改时,首先确认 Set-Cookie
响应 header 是您想要的,然后查看应用程序选项卡。
请注意,Chrome 对 IP 地址、单标签域和保留主机名(如“test”或“localhost”等)的域名有大量特殊规则。这些对于TLS/SSL、SameSite、COR、Preflight 请求等。在测试时避免使用其中任何一种,尽可能使用完全限定的主机名,否则您会对这些规则感到惊讶。