#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. Это, безусловно, дает решение, в то время как принятый ответ — нет.