Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Removing cookies with the same name but different paths

I need to delete clientside cookies with the same name but with different paths. What is the best way to do this in javascript.

like image 709
JKown Avatar asked Sep 20 '11 14:09

JKown


1 Answers

Just specify the same path of the cookie you want to remove, giving it a past expiration.

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

Changing it to expire the cookie with a path of / will still only expire one of the cookies -- the path given has to match the path set:

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

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

To remove both, you'll have to expire each with their path:

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

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

Now, these examples assume you're browsing /path/ or a sub-directory of it.


[edit]

To remove in bulk, try something like this:

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/']);

Demo: http://jsfiddle.net/M2dZ3/

You can also fake path lookups by splitting and iterating 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);
}

Demo: http://jsfiddle.net/M2dZ3/2/

like image 147
Jonathan Lonowski Avatar answered Sep 18 '22 12:09

Jonathan Lonowski