// // Cookie Functions -- "Night of the Living Cookie" Version (25-Jul-96) // // Written by: Bill Dortch, hIdaho Design // 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 // 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) { //secure='yes'; //alert('SetCookie name='+path+'-'+domain+'secure='+secure); document.cookie = name + "=" + escape (value) + ((expires) ? "; expires=" + expires.toGMTString() : "") + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + ((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=" + domain : "") + "; 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() + (30 * 24 * 60 * 60 * 1000)); // 30 * 24 hrs from now /* exemple de code document.write ("-----------Avant traitement----------"+ "
"); document.write ("=====tout les cookie:"+document.cookie + "=====
"); 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!"); SetCookie ("LeChemin", "C:\\SGT3\\TEMP", expdate); document.write ("-----------Apres setCookie----------"+ "
"); document.write ("=====tout les cookie:"+document.cookie + "=====
"); DeleteCookie ("LeChemin","/laurent","localhost"); DeleteCookie ("goner"); document.write ("-----------Apres Delete----------"+ "
"); document.write ("=====tout les cookie:"+document.cookie + "=====
"); document.write ("ccpath = " + GetCookie("ccpath") + "
"); document.write ("ccname = " + GetCookie("ccname") + "
"); document.write ("tempvar = " + GetCookie("tempvar") + "
"); document.write ("LeChemin = " + GetCookie("LeChemin") + "
"); DeleteCookie ("paranoid"); */ //SetCookie ("LeChemin", "C:\\SGT3\\TEMP", expdate); //document.write ("LeChemin = " + GetCookie("LeChemin") + "
"); //ERF : Fct permettant de palier au problème des espace dans les path de sauvegarde //qui provoque des plantages dans l'URL de login.stm function chaine_replace(chaine, chaine_origine, chaine_destination) { String_chaine = new String(chaine); splitString = String_chaine.split( chaine_origine); sRetour = ""; for ( i in splitString ) { sRetour = sRetour + splitString[i] + chaine_destination; } //=> Suppresion du dernier ajout de chaine destination sRetour = sRetour.substring( 0, sRetour.length - chaine_destination.length) return sRetour; } // return /SgtiV11 ou /SgtiV20 ou /SgtiV11en function getRoot() { //alert('document.url='+document.URL ); //tranformer http://minotaure/SgtiV11/_FR/support/sup_param_doc_envoi.stm -> /SgtiV11 s_url = document.URL; i_pos1 = s_url.indexOf('/',8); i_pos2 = s_url.indexOf('/',i_pos1 +1); s_url = s_url.substring(i_pos1,i_pos2); //alert('s_url calcule='+s_url); return s_url; }