Видалити файл cookie за назвою?


151

Як я можу видалити певний файл cookie з назвою roundcube_sessauth?

Чи не слід:

function del_cookie(name) {
    document.cookie = 'roundcube_sessauth' + 
    '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
} 

І потім:

<a href="javascript:del_cookie(name);">KILL</a>

Убити roundcube_sessauthпечиво?


1
name? У чому сенс цього? Або це похмілля з більш універсальної версії, яка дозволяє вказати ім’я файлу cookie?
paxdiablo

Не думай, що це дуп. Він спеціально запитує про очищення всіх файлів cookie.
paxdiablo

1
Я не хочу видаляти всі файли cookie ... Тільки одне. Я знайшов основний код з гугл. І звичайно я спробував це. @Paxdiablo Я припустив, що він назвав файли cookie, але, можливо, я абсолютно помиляюся.
Чарлі

@paxdiablo - ...How can I delete a specific cookie
Дерек 朕 會 功夫

1
@Derek та ін, ти, здається, неправильно розумієш. Я констатував, що запропонована дупа від Габе зовсім не є дурною, оскільки запропонований дуп запитував про видалення всіх файлів cookie, і це питання задає питання про видалення певного файлу cookie. Я не скаржився на це питання жодним чином, формою чи формою :-)
paxdiablo

Відповіді:


252

Ви повинні визначити шлях, на якому існує файл cookie, щоб переконатися, що ви видаляєте правильний файл cookie.

function set_cookie(name, value) {
  document.cookie = name +'='+ value +'; Path=/;';
}
function delete_cookie(name) {
  document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

Якщо не вказати шлях, браузер встановить файл cookie щодо сторінки, на якій ви зараз перебуваєте, тому якщо ви видалите файл cookie, перебуваючи на іншій сторінці, інший файл cookie продовжує своє існування.

Редагувати на основі коментаря @Evan Morrison
Майте на увазі, що в деяких випадках для ідентифікації правильного файлу cookie необхідний Domainпараметр.
Зазвичай він визначається як Domain=.yourdomain.com.
Розміщення крапки перед вашим доменним іменем означає, що цей файл cookie може існувати на будь-якому субдомені ( wwwтакож вважається субдоменом).

Також, як зазначено у відповіді @ RobertT, HttpOnlyфайли cookie не можуть бути видалені за допомогою JavaScript на стороні клієнта.


23
Це ганяло мене! Після того, як я додав Шлях = /, я зміг видалити. Дякую!
duyn9uyen

12
Це має бути правильна відповідь, без Pathбільшості випадків це не спрацює .
SuperMarco

9
Я не зміг видалити файл cookie, доки я не додав і шлях, і правильне значення 'Domain = value; '... Отже, моя заява була: document.cookie = "cookieName =; path = /; закінчується термін = Чт, 01 січня 1970 00:00:01 GMT; домен = .myDomain.com"
Еван Моррісон

1
Це рішення все ще працює, але може бути написане трохи більш стисло Max-Age=0, якщо вам цікаві такі речі.
MaxPRafferty

181

Щоб видалити файл cookie, встановіть expiresдату на щось, що минуло. Функція, яка це робить, була б.

var delete_cookie = function(name) {
    document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
};

Потім видалити файл cookie з ім'ям roundcube_sessauthпросто.

delete_cookie('roundcube_sessauth');

1
Я відчуваю, що це має працювати (схоже, це має працювати: D!), Але я переглядаю файли cookie, встановлені моєю сторінкою у firefox, і коли я натискаю кнопку "Убити", файл cookie не видаляється. Будь-яка ідея чому?
Чарлі

Це працює в Google Chrome. Встановіть firebug і подивіться, чи є помилки.

1
Немає помилок, я думаю, що це просто не видалення файлу cookie в Roundcube. Можливо, інші файли cookie видаляються просто.
Чарлі

39
Користувачі, які шукають відповідь на це питання, див. Відповідь нижче. path=/Ключ має важливе значення для сумісності браузера.
bencripps

2
Ця відповідь не працювала для мене в Chrome, не пробувала в Firefox. Але відповідь Емії, яка була нижче, справді спрацювала.
Даніель Ф

11

// якщо передано exMins = 0, воно видалиться, як тільки він його створить.

function setCookie(cname, cvalue, exMins) {
    var d = new Date();
    d.setTime(d.getTime() + (exMins*60*1000));
    var expires = "expires="+d.toUTCString();  
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

setCookie('cookieNameToDelete','',0) // this will delete the cookie.

exMins не визначений у цьому прикладі, ви, мабуть, мали на увазі exdays
bhurlow

Так .. замість перейменування аргументу заздалегідь на exMins .. дякую #BhBh
Kishor Patil

7

Я не дуже впевнений, чи була така ситуація з версією Roundcube з травня 12 року, але на сьогоднішній день відповідь полягає в тому, що ви не можете видалити roundcube_sessauthcookie з JavaScript, оскільки він позначений як HttpOnly. А це означає, що він недоступний з клієнтського коду JS і може бути видалений лише за допомогою серверного скрипту або за допомогою прямої дії користувача (за допомогою деяких механізмів браузера, таких як інтегрований налагоджувач або якийсь плагін).


1

Ви можете спробувати це рішення

var d = new Date();
d.setTime(d.getTime());
var expires = "expires="+d.toUTCString();
document.cookie = 'COOKIE_NAME' + "=" + "" + ";domain=domain.com;path=/;expires=" + expires;

0

У моєму випадку я використовував ударний код для різних середовищ.

  document.cookie = name +`=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;Domain=.${document.domain.split('.').splice(1).join('.')}`;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.