来自响应的 Internet Explorer Cookie 不会覆盖现有 Cookie
Internet Explorer Cookie from response not overwriting existing Cookies
我有一个客户端服务器 Web 应用程序,其中来自服务器的每个响应都将包含一个名为 fruitCookie
的 Cookie
。
然而,100 次中有 90 次,在服务器上,Cookie
将被设置为:
Cookie cookie = new Cookie("fruitCookie", "someRefreshedValue");
cookie.setPath("/");
httpResponse.addCookie(cookie);
其中 Cookie
是 javax.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
中工作正常。来自 http 方式或 Rest 的最新 Cookie
值在上述函数中被读取。
但是,在 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);
按预期工作。
我们可以在哪里获取 httpRequest
inside Rest as:
@GET
@Path("myPath")
public Response myRestEndPoint(@Context HttpServletRequest httpRequest) {
注意:这不适用于 "localhost"。请参考:Set-Cookie header does not set cookie in Internet Explorer
我有一个客户端服务器 Web 应用程序,其中来自服务器的每个响应都将包含一个名为 fruitCookie
的 Cookie
。
然而,100 次中有 90 次,在服务器上,Cookie
将被设置为:
Cookie cookie = new Cookie("fruitCookie", "someRefreshedValue");
cookie.setPath("/");
httpResponse.addCookie(cookie);
其中 Cookie
是 javax.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
中工作正常。来自 http 方式或 Rest 的最新 Cookie
值在上述函数中被读取。
但是,在 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);
按预期工作。
我们可以在哪里获取 httpRequest
inside Rest as:
@GET
@Path("myPath")
public Response myRestEndPoint(@Context HttpServletRequest httpRequest) {
注意:这不适用于 "localhost"。请参考:Set-Cookie header does not set cookie in Internet Explorer