java - 来自响应的 Internet Explorer Cookie 不会覆盖现有 Cookie

标签 java rest http cookies dojo

我有一个客户端服务器 Web 应用程序,其中来自服务器的每个响应都将包含一个名为 fruitCookieCookie

然而,100 次中有 90 次,在服务器上,Cookie 将被设置为:

Cookie cookie = new Cookie("fruitCookie", "someRefreshedValue");
cookie.setPath("/");
httpResponse.addCookie(cookie);

其中 Cookiejavax.servlet.http.Cookie

但是,剩下的 10 次,在服务器上,Cookie 将从 rest 端点设置为:

NewCookie fruitCokie = new NewCookie("fruitCookie", "someRefreshedValue", "/", "", "", -1, false);
return Response.ok().cacheControl(ResourceCache.NO_CACHE).cookie(fruitCookie).build();

其中 NewCookie 是 javax.ws.rs.core.NewCookie

在客户端,我使用 dojo 读取 cookie 为:

getCookieValue: function (cookieName) {
        return cookie(cookieName); // cookieName is fruitCookie
},

这在 Chrome 中运行良好。最新的 Cookie 值可以从 http 方式或 Rest 中读取到上面的函数中。

但是,在 IE 中,它不起作用。如果其余调用发送 Cookie,我可以在开发控制台上看到新的 Cookie 作为响应,但是,上面的调用一直在浏览器和部分上返回旧值发送的请求。

我不确定是 IE 浏览器导致了这个问题,还是它与路径和域有关,或者是 dojo cookie 小部件的工作方式。

我该如何解决这个问题?

最佳答案

显然,IE 非常关心域。

所以改变以下内容

NewCookie fruitCokie = new NewCookie("fruitCookie", "someRefreshedValue", "/", "", "", -1, false);

NewCookie fruitCokie = new NewCookie("fruitCookie", "someRefreshedValue", "/", httpRequest.getServerName(), "", -1, false); 

按预期工作。

我们可以在 Rest 中获取 httpRequest 的地方:

@GET
@Path("myPath")
public Response myRestEndPoint(@Context HttpServletRequest httpRequest) {

注意:这不适用于“localhost”。请引用:Set-Cookie header does not set cookie in Internet Explorer

关于java - 来自响应的 Internet Explorer Cookie 不会覆盖现有 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54681979/

相关文章:

java - Spring 休息时收到 400 Bad request

java - 如何解决 Angular 12 中的 CORS 问题?

php - 允许用户在没有 "Confirm Form Resubmission"弹出窗口的情况下刷新浏览器

.net - IIS 缓存重试

java - 如果 MongoDB 无法访问,如何得到错误?

java - 已经存在具有相同运行时名称的部署

java - 在 java 中创建一个稀疏的 BufferedImage

java - 编写 QBE Restful 方法的最佳方法?

ios - 如何管理 AFNetworking 上的事件操作 (AFDownloadRequestOperation)

Java 将参数动态传递给 junit 测试