Установка постоянного cookie из Java не работает в IE - PullRequest
7 голосов
/ 11 ноября 2009

All

Хотя я вижу похожие темы на форуме, но не вижу четкого решения по этому вопросу. Я пытаюсь установить javax.servlet.http.Cookie со сроком действия (чтобы он сохранялся во время сеансов браузера). Код:

public void respond(HttpServletRequest req, HttpServletResponse resp) {
    int expiration = 3600;
    Cookie cookie = new Cookie("TestCookie", "xyz");
    cookie.setDomain("");
    cookie.setVersion(0);
    cookie.setPath("/");
    cookie.setMaxAge(expiration);
    cookie.setSecure(false);
    resp.addCookie(cookie);
}

Я не вижу, чтобы этот файл cookie устанавливался при проверке инструментов разработчика IE. Поиск в Интернете дал мне понять, что IE не рассматривает Max-Age, а работает только с Expires. Если это не работает для IE, то существует ли проверенный способ установки заголовков ответа HTTP для постоянного cookie, чтобы он работал для IE?

PS: это прекрасно работает во всех других браузерах.

Я попытался создать строку для куки с атрибутом expires. IE удалось создать его, но он потерял домен (по умолчанию - ""), показал ".com" и превратил его в файл cookie сеанса вместо постоянного файла cookie Это снова отлично работает во всех других браузерах.

Пожалуйста, помогите. Спасибо.

Ответы [ 3 ]

4 голосов
/ 12 сентября 2012

Работая с IE9, я обнаружил, что это атрибут HttpOnly, который был необходим для того, чтобы он отображал значение cookie в последующих публикациях, например:

Set-Cookie: autologCk1=ABCD; Path=/autolog/; HttpOnly
1 голос
/ 17 января 2012

Поскольку javax.servlet.http.Cookie не позволяет вам установить атрибут Expires для cookie, вы должны установить его вручную.

Вам также необходимо знать, что Expires должно быть указано в форме Wdy, DD Mon YYYY HH:MM:SS GMT после RFC-2616 Полная дата ( дополнительная информация ).

В Java вы можете сделать это следующим образом:

public void respond(HttpServletRequest req, HttpServletResponse resp) {
    int expiration = 3600;
    StringBuilder cookie = new StringBuilder("TestCookie=xyz; ");

    DateFormat df = new SimpleDateFormat("EEE, dd-MMM-yyyy HH:mm:ss 'GMT'", Locale.US);
    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.SECOND, 3600);
    cookie.append("Expires=" + df.format(cal.getTime()) + "; ");

    cookie.append("Domain=; ");
    cookie.append("Version=0; ");
    cookie.append("Path=/; ");
    cookie.append("Max-Age=" + expiration + "; ");
    cookie.append("Secure; ");
    resp.setHeader("Set-Cookie", cookie.toString());
}
1 голос
/ 10 декабря 2009

Ответ на Постоянные куки из сервлета в IE .

Ваш случай может отличаться от той же самой проблемы, то есть с префиксом домена "." (я уверен, что это функция cookie cookie версии 1), что-то в стеке Java решает, что это cookie версии 1 (не распознается и не сохраняется в IE, даже в IE8) и отправляет этот формат cookie.

Или, как следует из этого ответа, в вашем значении cookie есть что-то, что содержит нераспознанный символ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...