一尘不染

如何在JSP中为子域正确设置cookie?

jsp

我有以下设置:

  • 所有请求均为https(在下面的描述中,我将省略此请求)
  • 3个docker服务器:localhost:8090,localhost:8091,localhost:8092
  • 在主机上(在Windows计算机上),我有3个域:loc.localdomain,loc2.localdomain和loc3.localdomain都指向我的IP地址
  • 所以我将在我的应用中使用localhost:8090-> loc.localdomain,localhost:8091-> loc2.localdomain和localhost:8092-> loc3.localdomain

现在,我有一个应用程序loc可以为loc3子域设置一些Cookie 。我看到在chrome网络响应中设置(或假设设置了)cookie。

Set-Cookie: MY_COOKIE=YUMM; domain=loc3.localdomain; 
expires=Fri, 21-Jun-2019 10:48:58 GMT; path=/coolApp/bro

然后在app中,loc我有一个按钮,该按钮将用户发送到另一个app中loc2,该用户将用户重定向到loc3at
loc3.localdomain:8092/coolApp/bro/something/more。因此,目前我应该在的应用程序请求中看到cookie
loc3,但我没有看到。

Cookies设置:

FacesContext facesContext = FacesContext.getCurrentInstance();
//facesContext.getExternalContext().addResponseCookie("TEST", "TEST", properties); tried this too 
//then in properties will be the maxAge, path and domain set

Cookie cookie = (Cookie) facesContext.getExternalContext().getRequestCookieMap().get("MY_COOKIE");
if(cookie == null){
     cookie = new Cookie("MY_COOKIE", "YUMMM");
}

cookie.setMaxAge(31536000);
cookie.setPath("/coolApp/bro");
cookie.setDomain("loc3.localdomain"); // I've tried ".localdomain" too

HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
response.addCookie(cookie);

知道此设置有什么问题吗?


阅读 270

收藏
2020-06-08

共1个答案

一尘不染

基于此(https://curl.haxx.se/rfc/cookie_spec.html),该域至少应包含2个点,因此答案是对本地主机使用其他别名来模拟我的子域。就像是:*.example.com

更改域后,所有工作均按预期进行。

2020-06-08