Mega Code Archive

 
Categories / JavaScript DHTML / Development
 

Bill Dortchs Cookie Functions

/* JavaScript Bible, Fourth Edition by Danny Goodman  Publisher: John Wiley & Sons CopyRight 2001 ISBN: 0764533428 */ <html> <head> <title>Cookie Functions</title> </head> <body> <script language="javascript"> <!-- begin script // //  Cookie Functions -- "Night of the Living Cookie" Version (25-Jul-96) // //  Written by:  Bill Dortch, hIdaho Design <bdortch@hidaho.com> //  The following functions are released to the public domain. // //  This version takes a more aggressive approach to deleting //  cookies.  Previous versions set the expiration date to one //  millisecond prior to the current time; however, this method //  did not work in Netscape 2.02 (though it does in earlier and //  later versions), resulting in "zombie" cookies that would not //  die.  DeleteCookie now sets the expiration date to the earliest //  usable date (one second into 1970), and sets the cookie's value //  to null for good measure. // //  Also, this version adds optional path and domain parameters to //  the DeleteCookie function.  If you specify a path and/or domain //  when creating (setting) a cookie**, you must specify the same //  path/domain when deleting it, or deletion will not occur. // //  The FixCookieDate function must now be called explicitly to //  correct for the 2.x Mac date bug.  This function should be //  called *once* after a Date object is created and before it //  is passed (as an expiration date) to SetCookie.  Because the //  Mac date bug affects all dates, not just those passed to //  SetCookie, you might want to make it a habit to call //  FixCookieDate any time you create a new Date object: // //    var theDate = new Date(); //    FixCookieDate (theDate); // //  Calling FixCookieDate has no effect on platforms other than //  the Mac, so there is no need to determine the user's platform //  prior to calling it. // //  This version also incorporates several minor coding improvements. // //  **Note that it is possible to set multiple cookies with the same //  name but different (nested) paths.  For example: // //    SetCookie ("color","red",null,"/outer"); //    SetCookie ("color","blue",null,"/outer/inner"); // //  However, GetCookie cannot distinguish between these and will return //  the first cookie that matches a given name.  It is therefore //  recommended that you *not* use the same name for cookies with //  different paths.  (Bear in mind that there is *always* a path //  associated with a cookie; if you don't explicitly specify one, //  the path of the setting document is used.) //   //  Revision History: // //    "Toss Your Cookies" Version (22-Mar-96) //      - Added FixCookieDate() function to correct for Mac date bug // //    "Second Helping" Version (21-Jan-96) //      - Added path, domain and secure parameters to SetCookie //      - Replaced home-rolled encode/decode functions with Netscape's //        new (then) escape and unescape functions // //    "Free Cookies" Version (December 95) // // //  For information on the significance of cookie parameters,  //  and on cookies in general, please refer to the official cookie //  spec, at: // //      http://www.netscape.com/newsref/std/cookie_spec.html     // //****************************************************************** // // "Internal" function to return the decoded value of a cookie // function getCookieVal (offset) {   var endstr = document.cookie.indexOf (";", offset); if (endstr == -1)     endstr = document.cookie.length;   return unescape(document.cookie.substring(offset, endstr)); } // //  Function to correct for 2.x Mac date bug.  Call this function to //  fix a date object prior to passing it to SetCookie. //  IMPORTANT:  This function should only be called *once* for //  any given date object!  See example at the end of this document. // function FixCookieDate (date) {   var base = new Date(0);   var skew = base.getTime(); // dawn of (Unix) time - should be 0   if (skew > 0)  // Except on the Mac - ahead of its time     date.setTime (date.getTime() - skew); } // //  Function to return the value of the cookie specified by "name". //    name - String object containing the cookie name. //    returns - String object containing the cookie value, or null if //      the cookie does not exist. // function GetCookie (name) {   var arg = name + "=";   var alen = arg.length;   var clen = document.cookie.length;   var i = 0;   while (i < clen) {     var j = i + alen;     if (document.cookie.substring(i, j) == arg)       return getCookieVal (j);     i = document.cookie.indexOf(" ", i) + 1;     if (i == 0) break;    } return null; } // //  Function to create or update a cookie. //    name - String object containing the cookie name. //    value - String object containing the cookie value.  May contain //      any valid string characters. //    [expires] - Date object containing the expiration data of the cookie.  If //      omitted or null, expires the cookie at the end of the current session. //    [path] - String object indicating the path for which the cookie is valid. //      If omitted or null, uses the path of the calling document. //    [domain] - String object indicating the domain for which the cookie is //      valid. If omitted or null, uses the domain of the calling document. //    [secure] - Boolean (true/false) value indicating whether cookie transmission //      requires a secure channel (HTTPS).   // //  The first two parameters are required.  The others, if supplied, must //  be passed in the order listed above.  To omit an unused optional field, //  use null as a place holder.  For example, to call SetCookie using name, //  value and path, you would code: // //      SetCookie ("myCookieName", "myCookieValue", null, "/"); // //  Note that trailing omitted parameters do not require a placeholder. // //  To set a secure cookie for path "/myPath", that expires after the //  current session, you might code: // //      SetCookie (myCookieVar, cookieValueVar, null, "/myPath", null, true); // function SetCookie (name,value,expires,path,domain,secure) {   document.cookie = name + "=" + escape (value) +     ((expires) ? "; expires=" + expires.toGMTString() : "") +     ((path) ? "; path=" + path : "") +     ((domain) ? "; domain=.uregina.ca" : "") +     ((secure) ? "; secure" : ""); } //  Function to delete a cookie. (Sets expiration date to start of epoch) //   name -   String object containing the cookie name //    path -   String object containing the path of the cookie to delete.  This MUST //             be the same as the path used to create the cookie, or null/omitted if //             no path was specified when creating the cookie. //    domain - String object containing the domain of the cookie to delete.  This MUST //             be the same as the domain used to create the cookie, or null/omitted if //             no domain was specified when creating the cookie. // function DeleteCookie (name,path,domain) {   if (GetCookie(name)) {     document.cookie = name + "=" +       ((path) ? "; path=" + path : "") +       ((domain) ? "; domain=.uregina.ca" : "") +       "; expires=Thu, 01-Jan-70 00:00:01 GMT";   } } // //  Examples // var expdate = new Date (); FixCookieDate (expdate); // Correct for Mac date bug - call only once for given Date object! expdate.setTime (expdate.getTime() + (24 * 60 * 60 * 1000)); // 24 hrs from now  SetCookie ("ccpath", "http://www.hidaho.com/colorcenter/", expdate); SetCookie ("ccname", "hIdaho Design ColorCenter", expdate); SetCookie ("tempvar", "This is a temporary cookie."); SetCookie ("ubiquitous", "This cookie will work anywhere in this domain",null,"/"); SetCookie ("paranoid", "This cookie requires secure communications",expdate,"/",null,true); SetCookie ("goner", "This cookie must die!"); document.write (document.cookie + "<br>"); DeleteCookie ("goner"); document.write (document.cookie + "<br>"); document.write ("ccpath = " + GetCookie("ccpath") + "<br>"); document.write ("ccname = " + GetCookie("ccname") + "<br>"); document.write ("tempvar = " + GetCookie("tempvar") + "<br>"); // end script --> </script> </body> </html>