79

I have written code to save cookies in JavaScript. Now I need to clear the cookies irrespective of values that I assigned.

Are there any script modules to delete all cookies that were generated by Javascript?

My Sample Code:

document.cookie = 'ppkcookie2=another test; expires=Fri, 3 Aug 2001 20:47:11 UTC; path=/' function createCookie(name,value,days) { if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; } function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } function eraseCookie(name) { createCookie(name,"",-1); } 

How else could I clear all of the cookies?

Will there will be any problems when I test the code on the webserver?

0

4 Answers 4

86

There is no 100% solution to delete browser cookies.

The problem is that cookies are uniquely identified by not just by their key "name" but also their "domain" and "path".

Without knowing the "domain" and "path" of a cookie, you cannot reliably delete it. This information is not available through JavaScript's document.cookie. It's not available through the HTTP Cookie header either!

However, if you know the name, path and domain of a cookie, then you can clear it by setting an empty cookie with an expiry date in the past, for example:

function clearCookie(name, domain, path){ var domain = domain || document.domain; var path = path || "/"; document.cookie = name + "=; expires=" + +new Date + "; domain=" + domain + "; path=" + path; }; 
Sign up to request clarification or add additional context in comments.

6 Comments

cool function! There is a little typo though. There should only be one '+' between "expires=" and new Date :)
@Andbdrew That's not a typo. Appending a + in front of any variable in JavaScript converts it into a number. Without that you will get the date in string format since the + operator is used as string concatenation operator here while what you really want is the Unix timestamp
This answers the question better than the accepted answer. Very pertinent information.
@jb - since you have the domain info included here, is there any chance that this can list cookies set with a domain other than the site's own domain?
@VUELA using the function I provided you can only clear cookies related to the TLD of the window. You cannot clear cookies on other domains. You may find this article from GitHub interesting: github.com/blog/1466-yummy-cookies-across-domains
|
74

On the face of it, it looks okay - if you call eraseCookie() on each cookie that is read from document.cookie, then all of your cookies will be gone.

Try this:

var cookies = document.cookie.split(";"); for (var i = 0; i < cookies.length; i++) eraseCookie(cookies[i].split("=")[0]); 

All of this with the following caveat:

  • JavaScript cannot remove cookies that have the HttpOnly flag set.

11 Comments

"You can only remove cookies created by JavaScript - if a cookie was create by the server, then you cannot remove it through JavaScript." Actually, you should be able to erase any cookies you can see.
I can't find the exact reference right now, but I've had some problems in client manipulations of cookies created by a server. I do believe that there are some issues with that at least on Firefox.
It's the "HttpOnly" flag that is catching you up. You CAN delete server cookies from javascript unless they are protected with the HttpOnly flag
Thanks for the explanation. The name is not really intuitive, I think.
I edited the final sentence in the answer for accuracy so the comments above are now redundant.
|
11

This is a function we are using in our application and it is working fine.

delete cookie: No argument method

function clearListCookies() { var cookies = document.cookie.split(";"); for (var i = 0; i < cookies.length; i++) { var spcook = cookies[i].split("="); deleteCookie(spcook[0]); } function deleteCookie(cookiename) { var d = new Date(); d.setDate(d.getDate() - 1); var expires = ";expires="+d; var name=cookiename; //alert(name); var value=""; document.cookie = name + "=" + value + expires + "; path=/acc/html"; } window.location = ""; // TO REFRESH THE PAGE } 

Edit: This will delete the cookie by setting it to yesterday's date.

1 Comment

Very nice touch on window.location there.
5

Why do you use new Date instead of a static UTC string?

 function clearListCookies(){ var cookies = document.cookie.split(";"); for (var i = 0; i < cookies.length; i++){ var spcook = cookies[i].split("="); document.cookie = spcook[0] + "=;expires=Thu, 21 Sep 1979 00:00:01 UTC;"; } } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.