【问题标题】:Internet Explorer Cookie from response not overwriting existing Cookies来自响应的 Internet Explorer Cookie 未覆盖现有 Cookie
【发布时间】:2019-07-07 23:35:01
【问题描述】:

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

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

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

其中Cookiejavax.servlet.http.Cookie

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

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 小部件的工作方式。

我该如何解决这个问题?

【问题讨论】:

    标签: java rest http cookies dojo


    【解决方案1】:

    显然,IE 非常关心域。

    所以改变如下

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

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

    按预期工作。

    我们可以在 Rest as 中获取httpRequest

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

    注意:这不适用于“本地主机”。请参考:Set-Cookie header does not set cookie in Internet Explorer

    【讨论】:

      猜你喜欢
      • 2013-08-14
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      • 2018-08-15
      • 2018-10-13
      • 2016-12-08
      • 2019-05-30
      • 2011-01-02
      相关资源
      最近更新 更多