jquery, видалити файли cookie


90

Я хочу використовувати JQuery для видалення файлів cookie; Я спробував це

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

Потім я оновлюю сторінку, і файл cookie все ще є:

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

Чому? Дякую


деякий браузер видалить файл cookie лише після перезапуску браузера.
ZOLDIK

Відповіді:


145

Щоб видалити файл cookie за допомогою JQuery, встановіть значення null:

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

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

Для деяких версій файлів cookie jQ вищенаведене рішення встановить для файлу cookie значення null. Таким чином не видаляючи cookie. Натомість використовуйте код, як запропоновано нижче.

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

Але з джерела тут: plugins.jquery.com/files/jquery.cookie.js.txt :, if (value === null) { value = '';options.expires = -1;}те, що входить до функції обробки, тому вони повинні виконувати те саме. (параметри вказані (name, value, options))
aularon

9
Чи є код налаштування файлів cookie та тестовий код на одній сторінці? Якщо ні, то вам потрібно буде явно встановити pathпараметри для обох команд, оскільки за замовчуванням вказано шлях до поточної сторінки. Тестуйте, встановивши корінь домену як у всіх місцях, де файли cookie читаються та пишуться:$.cookie('name', value, {path:'/'})
Chadwick

1
Чедвік> Можливо, ти маєш рацію. За напр. Я встановлюю файли cookie на сайті.com, потім переходжу на сайт.com/user, site.com/user/mod, site.com/user/mod/new, і я хочу бачити файли cookie на всій цій сторінці. Як має виглядати шлях, такий: {path: '/'}?
user319854

2
Цей код не видаляє файл cookie, але встановлює значення null.
Томзан

12
-1, оскільки насправді це не видаляє файл cookie. $.removeCookie('cookie_name')робить.
Росді Касім

71

Ви можете спробувати це:

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

джерело: https://github.com/carhartl/jquery-cookie#readme


Я .. у мене це добре
Катаклізм

Коли ви використовуєте субдомен, можливо, вам також доведеться його вказати. Тим більше, що може знадобитися період на початку доменного імені (.www.example.com)
Alexis Wilke

Зауважте, це не спрацювало для нас, коли коду з будь-якої причини потрібно було перейти в іншу функцію. $ .cookie ('name', null), як зазначено вище, здається більш надійним. Це видаляє cookie, однак для деяких людей може спрацювати.
Лігемер,

Це насправді справжня відповідь!
Калашні,

15

Ви також можете видалити файли cookie, не використовуючи плагін jquery.cookie:

document.cookie = 'NAMEOFYOURCOOKIE' + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';

4

це проблема неправильного розуміння файлів cookie. Браузери розпізнають значення файлів cookie не лише для ключів, а й порівнюють шлях до опцій та домен. Отже, браузери розпізнають різне значення, яке значення файлів cookie має цей ключ «ім’я» з параметром налаштування сервера (шлях = «/»; домен = «mydomain.com»), а ключ - «ім’я» без опції.



1

Працював у мене лише тоді, коли pathбуло встановлено, тобто:

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

Проголосувавши проти, ви скопіювали та вставили мою відповідь як вашу
Отто Канеліс,

1
@OttoKanellis, тому я пропоную знизити прийняту відповідь (оскільки її було відредаговано після моєї відповіді) і також проголосувати проти вашої відповіді (оскільки ви не виділяли важливість параметра шляху )!
Андрон,

-3

Те, що ви робите, є правильним, проблема в іншому, наприклад, кукі знову встановлюється якось на оновлення.


4
Хоча це посилання може відповісти на питання, краще включити сюди основні частини відповіді та надати посилання для довідки. Відповіді лише на посилання можуть стати недійсними, якщо пов’язана сторінка зміниться.
Урі Агассі

Саме для цієї відповіді я хочу сказати, що OP робить це правильно. Скопіювати вставку коду OP буде зайвим, а додавання іншого коду заплутає читача. Можна прокрутити вгору і подивитися, що робив ОП, тут це «суттєва частина». Однак, якщо ви відчуваєте, що буде краще щось включити (мабуть, деякі люди це роблять ... Один із них навіть проголосував за мою відповідь :)), просто відредагуйте відповідь і виправте відповідним чином. З повагою
aularon

Проблема посилань полягає в тому, що вони, як правило, «гниють» - вони змінюються, рухаються, зникають (на прикладі - ваше посилання вже мертве!). Ось чому ми вважаємо за краще, щоб ви цитували відповідний текст із посилання разом із ним, тож ваша відповідь буде самодостатньою (див. Також meta.stackexchange.com/questions/8231/… )
Урі Агассі

Я це добре знаю, але знову ж таки: тут справа не в цьому. Повну відповідь вище можна переписати як "Те, що ви робите, є правильним, проблема в іншому місці, наприклад, кукі знову встановлюється якось на оновлення". Отже, знову ж таки, гниття посилань є проблемою, включаючи саму відповідь поруч із посиланням - це шлях. Ця відповідь просто не має значення.
aularon

Тож знову і знову, якщо відповідь містить одне посилання, і це посилання мертве, це не означає, що відповідь недостатньо хороша. Деякі посилання є лише для надання додаткових деталей, але вони не є необхідними для повноти відповіді. Мені така поведінка здається погано запрограмованим ботом, який не має базового NLP для розуміння контекстного посилання. Напевно, вам слід припинити це робити.
aularon
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.