gpt4 book ai didi

java - IE 和 Chrome 不存储来自 RESTEasy 的 cookie

转载 作者:行者123 更新时间:2023-11-30 08:20:59 24 4
gpt4 key购买 nike

问题

我在使用 REST 应用程序 (RESTEasy) 时遇到了麻烦。在我的应用程序中,我正在设置一个 cookie。当我使用 Firefox 开发和测试它时,我没有遇到任何问题。 cookie 将按预期设置并返回。但是,当我在 Internet Explorer 中尝试时,cookie 不会被设置。我在 Chrome 中确认了相同的行为。

我使用 Fiddler 验证了无论哪个浏览器发出请求,cookie 都会被发回。但是,尽管浏览器收到了 cookie,但 IE 和 Chrome 不仅没有发回 cookie,而且我在浏览器的 cookie 存储中也找不到 cookie 的踪迹。

我尝试过的

这件事发生在今天的工作中,我花了很长时间关闭 IE 中的所有安全设置。我不认为是这样。回到家后,我编写了一个简化版本,以尽可能多地排除代码复杂性。我还在 Safari 中测试过它,并在 Chrome 和 IE 上再次测试过。所以,这现在已经在 Windows 和 Mac 上进行了测试。运气不好。

我还尝试修改 cookie 的设置。我最初设置了 HttpOnly,所以我取消了它。我原来有一个 session cookie,所以我将其有效期更改为 1 天。我试着用路径和域来愚弄。运气不好。

该应用程序更复杂,但为了简化事情,我排除了跨站点问题、Ajax 问题等。我也尝试过不同的域:localhost、Intranet 和完全限定的域。不知道怎么回事!

这是返回的 cookie header 的示例。 (这来自 curl 和我精简版的应用程序。)在这个版本中,cookie 设置为 1 天后过期。但是,正如我所说,我也尝试过使用 session cookie。

Set-Cookie: ExampleCookie=abcdefg0123456; Version=1; Comment="Just a sample cookie."; Domain=localhost; Max-Age=86400; Expires=Sun, 31-Aug-2014 03:33:44 GMT; Path=/

示例代码(已测试)

下面是让我失望的代码的精简版本。我已经测试了下面的代码,我无法理解为什么 Chrome 和 Internet Explorer 不会设置 cookie,但 Firefox 和 Safari 会。是否有人对这些浏览器和 cookie 或 RESTEasy 和 cookie 有任何疑问?

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Cookie;
import javax.ws.rs.core.NewCookie;
import javax.ws.rs.core.Response;

// Omitted: The base path, set elsewhere, is /CookieExample/rest

@Path("/")
public class CookieExampleService {

@GET
@Path("/")
@Produces("text/html")
public Response sayHello() {
return Response.ok().entity("<p>Hello, Cookies!</p>").build();
}

@GET
@Path("/cookiejar")
@Produces("text/html")
public Response serveCookie() {
NewCookie cookie = new NewCookie("ExampleCookie",
"abcdefg0123456",
"/",
"localhost",
"Just a sample cookie.",
NewCookie.DEFAULT_MAX_AGE,
false);

// http://localhost:8080/CookieExample/rest/cookiejar
return Response.ok().cookie(cookie).entity("<p>Have a cookie!</p>").build();
}
}

任何见解将不胜感激。这真的让我难住了。谢谢!

最佳答案

这里的问题不是浏览器,而是您设置的域。正如已经discussed here RFC 2109期望域中有两个点。似乎 Firefox 不像这里的 Chrome 和 IE 那样严格。

如果您将域设置为 null 或空字符串,它将起作用。

关于java - IE 和 Chrome 不存储来自 RESTEasy 的 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25578872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com