Поведение Java Cookie.setMaxAge (0) до реализации или есть спецификация? - PullRequest
0 голосов
/ 18 февраля 2012

У меня есть веб-приложение, работающее на старой модифицированной установке Tomcat.Чтобы удалить файл cookie сеанса после выхода из системы, у меня есть следующий код:

Cookie sessionCookie = new Cookie("session",null);
sessionCookie.setMaxAge(0);
response.addCookie(sessionCookie);

В моем веб-приложении есть проблема, заключающаяся в том, что оно возвращает текущее время как часть файла cookie с истекшим сроком действия:

Set-Cookie: sesssion=null; Expires=Sat, 18-Feb-2012 18:04:52 GMT

Проблема в том, что клиенту требуется лишь немного отстать от сервера, чтобы продолжить отправку куки!

Однако в Tomcat 5.5 он возвращает:

Set-Cookie: session=null; Expires=Thu, 01-Jan-1970 00:00:10 GMT

Что является наиболее желательным поведением.

Мой вопрос, оба правильны, есть ли официальное руководство о том, как это должно быть реализовано, в документации просто говорится:

Нулевое значение приводит к удалению cookie.

Возможно, мне придется добавить заголовок Set-Cookie: сам, чтобы обойти это поведение?

Ответы [ 2 ]

1 голос
/ 18 февраля 2012

Похоже, что в спецификации нет ничего особенного в реализации этого метода.

Однако вы никогда не должны полагаться на то, что куки немедленно удаляются браузером, вы даже не должны полагаться на браузер, удаляющийcookie вообще, поскольку с сервера вы вообще не контролируете поведение клиента.

Что вы храните в этом cookie, не могли бы вы просто использовать сеанс, уже управляемый контейнером?

Когда вы аннулируете сеанс на сервере, даже если файл cookie остается в браузере, это не имеет значения, поскольку он будет признан недействительным на стороне сервера, а идентификатор сеанса в файле cookie больше не будет соответствовать существующему сеансу, иобъекты, которые были связаны с этим сеансом, будут уничтожены.

0 голосов
/ 18 февраля 2012

Браузер истечет срок действия куки, если время истечения <= текущее время. </p>

Если вы делаете это вручную, большинство людей вернет 0 эпох (что вы видите в tomcat 5.5) или, по крайней мере, текущее время минус некоторое количество времени для учета смещения часов. Тем не менее, вы никогда не сможете объяснить, что часы компьютера конечного пользователя полностью отключены.

Даже tomcat 5.5 - старое программное обеспечение. Это EOL сентябрь этого года (2012). Похоже, ваша проблема в том, что вы используете древнюю версию Tomcat (или Java), которая не была обновлена ​​или не поддерживается. Иногда вам нужно обновить вещи.

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