Удаление куки с тем же именем, но разными путями - PullRequest
11 голосов
/ 20 сентября 2011

Мне нужно удалить клиентские куки с тем же именем, но с разными путями.Каков наилучший способ сделать это в JavaScript.

Ответы [ 2 ]

18 голосов
/ 20 сентября 2011

Просто укажите тот же путь к файлу cookie, который вы хотите удалить, и срок его действия истек.

document.cookie = 'name=value1; path=/';
document.cookie = 'name=value2; path=/path/';

alert(document.cookie); // name=value1; name=value2


document.cookie = 'name=; path=/path/; expires=' + new Date(0).toUTCString();

alert(document.cookie); // name=value1

Изменение его на срок действия файла cookie с путем / все еще приведет к истечению срока действия только одного из файлов cookie - указанный путь должен соответствовать указанному пути:

document.cookie = 'name=; path=/; expires=' + new Date(0).toUTCString();

alert(document.cookie); // name=value2

Чтобы удалить оба, вы должны истечь каждый с их путем:

document.cookie = 'name=; path=/; expires=' + new Date(0).toUTCString();
document.cookie = 'name=; path=/path/; expires=' + new Date(0).toUTCString();

alert(document.cookie); // {blank}

Теперь в этих примерах предполагается, что вы просматриваете /path/ или его подкаталог.


[править]

Чтобы удалить навалом, попробуйте что-то вроде этого:

function expireAllCookies(name, paths) {
    var expires = new Date(0).toUTCString();

    // expire null-path cookies as well
    document.cookie = name + '=; expires=' + expires;

    for (var i = 0, l = paths.length; i < l; i++) {
        document.cookie = name + '=; path=' + paths[i] + '; expires=' + expires;
    }
}

expireAllCookies('name', ['/', '/path/']);

Демо: http://jsfiddle.net/M2dZ3/

Вы также можете подделать поиск пути, разделив и повторив window.location.pathname:

function expireActiveCookies(name) {
    var pathname = location.pathname.replace(/\/$/, ''),
        segments = pathname.split('/'),
        paths = [];

    for (var i = 0, l = segments.length, path; i < l; i++) {
        path = segments.slice(0, i + 1).join('/');

        paths.push(path);       // as file
        paths.push(path + '/'); // as directory
    }

    expireAllCookies(name, paths);
}

Демо: http://jsfiddle.net/M2dZ3/2/

1 голос
/ 20 сентября 2011

Вы можете установить cookie с теми же параметрами, но с датой в прошлом:

document.cookie =
  'ppkcookie2=another test; expires=Fri, 3 Aug 2001 20:47:11 UTC; path=/'

См. Некоторую ценную информацию в режиме причуд

[РЕДАКТИРОВАТЬ] Чтобы удалить куки с тем же именем, вы можете попробовать:

function delete_cookie ( cookie_name )
{
  var cookie_date = new Date ( );  // current date & time
  cookie_date.setTime ( cookie_date.getTime() - 1 );
  document.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString();
}

Источник

...