У меня есть клиент-серверное веб-приложение, в котором каждый ответ от сервера будет содержать Cookie с именем fruitCookie.
Однако в 90 из 100 раз на сервере 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.
На стороне клиента я читаю cookie, используя dojo, как:
getCookieValue: function (cookieName) {
return cookie(cookieName); // cookieName is fruitCookie
},
Это отлично работает в Chrome. И последнее значение Cookie либо из http, либо из Rest считывается в приведенной выше функции.
Однако в IE он не работает. Если вызов rest отправляет Cookie, я вижу новый Cookie в ответ на консоли разработчика, однако вызов выше продолжает возвращать старое значение уже в браузере и часть отправленного запроса.
Я не уверен, что причиной этого является браузер IE, или это связано с путем и доменом, или это способ работы виджета cookie dojo.
Как я могу решить эту проблему?




Судя по всему, IE очень заботится о домене.
Итак, изменив следующее
NewCookie fruitCokie = new NewCookie("fruitCookie", "someRefreshedValue", "/", "", "", -1, false);
к
NewCookie fruitCokie = new NewCookie("fruitCookie", "someRefreshedValue", "/", httpRequest.getServerName(), "", -1, false);
работал как положено.
Где мы можем получить httpRequest внутри Rest как:
@GET
@Path("myPath")
public Response myRestEndPoint(@Context HttpServletRequest httpRequest) {
Примечание. Это не будет работать на «localhost». См.: Заголовок Set-Cookie не устанавливает файл cookie в Internet Explorer