Устранить проблему с файлами cookie

#gwt #cookies #token

#gwt #файлы cookie #токен

Вопрос:

У меня есть файл cookie, сохраняющий токен при входе пользователя в www.example.com и затем он перенаправляет их на example.com/desktop или example.com/mobile в зависимости от того, какое устройство они используют. Когда они выходят из настольного приложения, я заменяю файл cookie на null, а затем вызываю remove cookie в GWT и перенаправляю их на www.example.com , но файл cookie все еще существует. Я делаю что-то не так здесь? Я раньше не часто работал с файлами cookie, поэтому я немного новичок в этом.

Ответ №1:

Поскольку файл cookie был установлен по другому пути, вы должны использовать Cookies.removeCookie("cookieName", "/") ( / это путь, используемый в вашем примере), а не Cookies.removeCookie("cookieName") .

Это потому, что без указанного пути по умолчанию используется путь к текущей странице (см. document.cookie ).

Итак, вы пытаетесь удалить файл cookie по адресу path=/desktop, тогда как на самом деле он находится по адресу path =/, поэтому удаление завершается неудачей.
Помните, что у вас могут быть два файла cookie с одинаковым именем, но разными путями; таким образом, у вас могут быть CookieName в path=/ и _CookieName в path=/desktop . Удаление файла cookie в path=/ не приведет к удалению файла в path=/desktop , и наоборот, удаление файла в path=/desktop не приведет к удалению файла в path=/ . В качестве дополнительного примечания: при доступе /desktop браузер отправит оба файла cookie, которые могут иметь разные значения.

Вкратце, поскольку вы установили для своего файла cookie значение / , не забывайте всегда передавать / в качестве пути везде, иначе вы могли бы создать новый файл cookie, а не изменять существующий, или не удалить его (с чем вы сталкиваетесь прямо сейчас).

Смотрите также Cookies.removeCookie(String,String)

Комментарии:

1. Спасибо, это проясняет поведение, которое я получал. Я определенно обнаружил, что если я удалил файл cookie с исходного пути, то он был успешно удален. Теперь это имеет смысл.

Ответ №2:

В случае, если вам также необходимо использовать домен не по умолчанию

 public static native void removeCookie(String name, String path, String domain) /*-{
    $doc.cookie = name   "="   ((path) ? ";path="   path : "")
              ((domain) ? ";domain="   domain : "")
              ";expires=Thu, 01 Jan 1970 00:00:01 GMT";
}-*/;
  

Комментарии:

1. Это, безусловно, дает решение, в то время как принятый ответ — нет.