Как удалить cookie с помощью jQuery?

90

Я хочу использовать jQuery для удаления файлов cookie; Я пробовал это:

$.cookie('name', '', { expires: -1 });

Но когда я обновляю страницу, cookie все еще там:

alert('name:' +$.cookie('name'));

Почему?

user319854
источник
какой-то браузер удалит cookie только после перезапуска браузера.
Eboubaker

Ответы:

148

Чтобы удалить cookie с помощью JQuery, установите значение null:

$.cookie("name", null, { path: '/' });

Изменить: окончательное решение заключалось в том, чтобы явно указать pathсвойство при доступе к файлу cookie, поскольку OP обращается к файлу cookie с нескольких страниц в разных каталогах, и, следовательно, пути по умолчанию были разными (это не было описано в исходном вопросе). Решение было обнаружено в обсуждении ниже, что объясняет, почему этот ответ был принят, несмотря на то, что он неверен.

Для некоторых версий jQ cookie приведенное выше решение установит для cookie значение null. Таким образом, куки не удаляются. Вместо этого используйте предложенный ниже код.

$.removeCookie('the_cookie', { path: '/' });
Чедвик
источник
Но из источника здесь: plugins.jquery.com/files/jquery.cookie.js.txt :, if (value === null) { value = '';options.expires = -1;}то, что входит в функцию обработки, поэтому они должны выполнять то же самое. (параметры есть (name, value, options))
aularon 08
9
Находятся ли код настройки файлов cookie и тестовый код на одной странице? Если нет, вам нужно явно указать pathв параметрах обеих команд, так как по умолчанию это путь к текущей странице. Протестируйте, установив корневой каталог вашего домена во всех местах, где файлы cookie читаются и записываются:$.cookie('name', value, {path:'/'})
Чедвик,
1
Chadwick> Может ты и прав. Для exm. Я устанавливаю файлы cookie на site.com, затем захожу на site.com/user, site.com/user/mod, site.com/user/mod/new и хочу видеть файлы cookie на всей этой странице. Как должен выглядеть путь, например: {путь: '/'}?
user319854 09
2
Этот код не удаляет файл cookie, но устанавливает его значение null.
Tomzan
12
-1, потому что это фактически не удаляет cookie. $.removeCookie('cookie_name')делает.
Росди Касим
71

Вы можете попробовать это:

$.removeCookie('the_cookie', { path: '/' });

источник: https://github.com/carhartl/jquery-cookie#readme

Герт-Ян Ребель
источник
Ага .. Меня это устраивает
Cataclysm
Когда вы используете поддомен, вам, возможно, придется указать его. Тем более, что точка в начале доменного имени может быть обязательной (.www.example.com)
Alexis Wilke
Обратите внимание, это не сработало для нас, когда код по какой-либо причине должен был перейти в другую функцию. $ .cookie ('name', null), как указано выше, кажется более надежным. Однако это удаление cookie может работать для некоторых людей.
Ligemer
На самом деле это настоящий ответ!
Kalaschni
15

Вы также можете удалить файлы cookie без использования плагина jquery.cookie:

document.cookie = 'NAMEOFYOURCOOKIE' + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
Ян Рихтер
источник
4

это проблема неправильного понимания cookie. Браузеры распознают значения файлов cookie не только для ключей, но и сравнивают путь и домен параметров. Таким образом, браузеры распознают разные значения, значения которых для файлов cookie, что ключ - это 'name' с параметром настройки сервера (path = '/'; domain = 'mydomain.com'), а ключ - 'name' без параметра.

Логан Ким
источник
1

Попробуй это

 $.cookie('_cookieName', null, { path: '/' });

{Path: '/'} сделает всю работу за вас

Отто Канеллис
источник
1

Работал у меня только когда pathбыл установлен, то есть:

$.cookie('name', null, {path:'/'})
Андрон
источник
Голосование против, потому что вы копируете и вставляете мой ответ как ваш
Отто Канеллис
1
@OttoKanellis, поэтому я предлагаю также снизить принятый ответ (потому что он был отредактирован после моего ответа) и проголосовать против вашего ответа (потому что вы не подчеркнули важность параметра пути )!
Андрон
-3

То, что вы делаете, правильно, проблема в другом месте, например, файл cookie каким-то образом устанавливается снова при обновлении.

Aularon
источник
4
Хотя эта ссылка может дать ответ на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если ссылка на страницу изменится.
Ури Агасси
Для этого самого ответа я говорю, что OP делает это правильно. Копирование кода OP будет излишним, а добавление другого кода запутает читателя. Можно прокрутить вверх и увидеть, что делал OP, здесь это «важная часть». Однако, если вы чувствуете, что будет лучше включить что-то (очевидно, некоторые люди делают ... Один из них даже проголосовал против моего ответа :)), просто отредактируйте ответ и исправьте его соответствующим образом. С уважением
aularon 07
Проблема со ссылками в том, что они имеют свойство «гнить» - они меняются, перемещаются, исчезают (например, ваша ссылка уже мертва!). Вот почему мы предпочитаем, чтобы вы цитировали соответствующий текст из ссылки вместе с ней, чтобы ваш ответ был самодостаточным (см. Также meta.stackexchange.com/questions/8231/… )
Ури Агасси
Я хорошо это понимаю, но опять же: здесь не так. Весь ответ, приведенный выше, можно переписать как «То, что вы делаете, правильно, проблема в другом месте, например, файл cookie каким-то образом устанавливается снова при обновлении». Итак, опять же, гниение ссылок - это проблема, включая сам ответ рядом со ссылкой - это путь. Это просто не имеет отношения к этому ответу.
aularon
Итак, снова и снова, если ответ содержит одну ссылку, и эта ссылка мертва, это не означает, что ответ недостаточно хорош. Некоторые ссылки предназначены только для предоставления дополнительных сведений, но не являются необходимыми для полноты ответа. Такое поведение мне кажется плохо запрограммированным ботом, у которого нет базового NLP для понимания контекстной ссылки. Вам, вероятно, следует прекратить это делать.
aularon 08