JAVASCRIPT   37

cookie jar js

Guest on 6th August 2022 01:18:53 AM

  1. //    Licensed Materials - Property of IBM
  2. //
  3. //    IBM Cognos Products: ps
  4. //
  5. //    (C) Copyright IBM Corp.
  6. //
  7. //    US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  8.  
  9.  // Define the limit for max No. of characters that we want to store in a browser cookie. Cognos customers can "potentially" modify this in this file.
  10.  // Use ~ 80% of actual browser limit of 4094 bytes.  This limit should be checked when setting cookies that could potentially exceed the limit.
  11. var g_iMaxAllowableCookieSize = 3275;
  12. var g_cc_state = "cc_state";
  13.  
  14. function setCookie(name, value, expires, path, domain, secure) {
  15.         // We could be very strict and prevent the cookie size from going over the limit right here but that would penalize small cookies too.
  16.         // if ((document.cookie.length + value.length) > g_iMaxAllowableCookieSize) {
  17.         //      return;
  18.         // }
  19.                
  20.         if (!path) {
  21.                 path = getPath();
  22.         }
  23.         if (!domain) {
  24.                 domain = getDomain();
  25.         }
  26.         if (!secure) {
  27.                 secure = getSecure();
  28.         }      
  29.        
  30.         document.cookie = name + "=" + value +
  31.                 ((expires) ? "; expires=" + expires.toGMTString() : "") +
  32.                 ((path) ? "; path=" + path : "") +
  33.                 ((domain) ? "; domain=" + domain : "") +
  34.                 ((secure) ? "; secure" : "");
  35. }
  36.  
  37. function delCookie(name, path, domain) {
  38.         if (path == null) {
  39.                 path = getPath();
  40.         }
  41.                
  42.         if (!domain) {
  43.                 domain = getDomain();
  44.         }
  45.        
  46.         var expires = new Date();
  47.        
  48.         if (getCookie(name)) {
  49.                 document.cookie = name + "=" +
  50.                 ("; expires=" + expires.toGMTString()) +
  51.                 ((path) ? "; path=" + path : "") +
  52.                 ((domain) ? "; domain=" + domain : "");
  53.         }
  54. }
  55.  
  56. function getCookie(name) {
  57.         var arg = name + "=";
  58.         var alen = arg.length;
  59.         var clen = document.cookie.length;
  60.         var i = 0;
  61.         while (i < clen) {
  62.                 var j = i + alen;
  63.                 if (document.cookie.substring(i, j) == arg) {
  64.                         return getCookieVal(j);
  65.                 }
  66.                 i = document.cookie.indexOf(" ", i) + 1;
  67.                 if (i == 0) {
  68.                         break;
  69.                 }
  70.         }
  71.         return null;
  72. }
  73.  
  74. function getCookieVal(offset) {
  75.         var endstr = document.cookie.indexOf(";", offset);
  76.         if (endstr == -1) {
  77.                 endstr = document.cookie.length;
  78.         }
  79.         return document.cookie.substring(offset, endstr);
  80. }
  81.  
  82. function setExpireDate(nOffset) {
  83.         if (!nOffset) {
  84.                 nOffset = 0;   
  85.         }
  86.         var expdate = new Date();
  87.         expdate.setTime(expdate.getTime() + nOffset);
  88.         return expdate;
  89. }
  90.  
  91. function getPath() {
  92.         if (typeof sCookiePath != 'undefined' && sCookiePath != "") {
  93.                 return sCookiePath;
  94.         } else {
  95.                 return location.pathname.substring(0, location.pathname.lastIndexOf("/"));
  96.         }
  97. }
  98.  
  99. function getDomain() {
  100.         if (typeof sCookieDomain != 'undefined') {
  101.                 return sCookieDomain;
  102.         }
  103.         return null;
  104. }
  105.  
  106. function getSecure() {
  107.         if ((typeof sCookieSecure != 'undefined') && (sCookieSecure === 'true')) {
  108.                 return true;
  109.         }
  110.         return null;
  111. }
  112.  
  113. function getSessionString() {
  114.         var sSession = getCookie(g_cc_state);
  115.         if (sSession != null) {
  116.                 var indexOfFirstQuote = sSession.indexOf('"');
  117.                 if (indexOfFirstQuote == 0) {
  118.                         var newSession = sSession.substring(1, sSession.length - 1);
  119.                         sSession = newSession;
  120.                 }
  121.         }
  122.         return sSession;
  123. }
  124.  
  125. function setStateValue(sName, sValue) {
  126.         var sSession = getSessionString();
  127.         //-- If we have no session or it is empty or the name is invalid then return.
  128.         if (!(sName == "" || sName == null)) {
  129.                 var sNewSession = "";  
  130.                 if (sSession == "" || sSession == "null" || sSession == null) {
  131.                         sNewSession = sName + sNameValueDelimiter + sValue;
  132.                 } else   {
  133.                         var aSession = [];
  134.                         var bParameterExists = false;
  135.                         // unpack the session
  136.                         aSession = sSession.split(sParamDelimiter);
  137.                        
  138.                         var n = aSession.length;
  139.                         // update the specified parameter
  140.                         for (var i = 0; i < n; i++) {  
  141.                                 if (aSession[i].indexOf(sName) == 0) {
  142.                                         aSession[i] = sName + sNameValueDelimiter + sValue;
  143.                                         bParameterExists = true;
  144.                                         break;
  145.                                 }
  146.                         }                      
  147.                         // if a value was updated in the existing session then repack the session, otherwise just append the new param at the end.
  148.                         if (!bParameterExists) {
  149.                                 sNewSession = sSession + sParamDelimiter + sName + sNameValueDelimiter + sValue;
  150.                         } else {
  151.                                 // pack the updated session
  152.                                 sNewSession = aSession.join(sParamDelimiter);
  153.                         }
  154.                 }      
  155.        
  156.                 // Save the new session ...(since cc_state always has a : we must quote it
  157.                 setCookie(g_cc_state, "\"" + sNewSession + "\"", 0, getPath());
  158.         }
  159.         return;
  160. }
  161.  
  162. function clearSessionEntry(sNames) {
  163.         var sSession = getSessionString();
  164.         if (sSession != "" && sSession != "null" && sSession != null) {
  165.                 var newSession = sSession;
  166.                 var aName = [];
  167.                 // Unpack the elements passed in to remove from the cc_state.
  168.                 // The format of sNames is the same as what is used for the cc_state cookie <name> [[separator <name>]...])
  169.                 aName = sNames.split(sParamDelimiter); 
  170.                 var n = aName.length;
  171.                 for (var i = 0; i < n; i++) {
  172.                         var sName = aName[i];
  173.                         // index in the session of the named entry.    
  174.                         var iStart = newSession.indexOf(sName);
  175.                         if (iStart != -1) {
  176.                                 var frontEnd = null;
  177.                                 var backEnd = null;
  178.                                 // index in the session after the named entry.
  179.                                 var iEnd = iStart + sName.length + sNameValueDelimiter.length;
  180.                                 // Get the info from the session before the named entry.
  181.                                 if (--iStart > 0) {
  182.                                         frontEnd = newSession.substring(0, iStart);
  183.                                 }
  184.                                 if (iEnd < newSession.length) {
  185.                                         // Get the info from the session after the named entry - including the parameter delimiter.
  186.                                         backEnd = newSession.substring(iEnd);
  187.                                         iEnd = backEnd.indexOf(sParamDelimiter);
  188.                                         if (iEnd != -1) {
  189.                                                 backEnd = backEnd.substring(++iEnd);
  190.                                         } else {
  191.                                                 backEnd = null;
  192.                                         }
  193.                                 }
  194.                                 // Put the info together again - without the named entry
  195.                                 if (backEnd != null && frontEnd != null) {
  196.                                         newSession = frontEnd + sParamDelimiter + backEnd;
  197.                                 } else {
  198.                                         if (backEnd == null) {
  199.                                                 newSession = frontEnd;
  200.                                         } else {
  201.                                                 if (frontEnd == null) {
  202.                                                         newSession = backEnd;
  203.                                                 }
  204.                                         }
  205.                                 }
  206.                         }
  207.                 }
  208.                 // Save the new session ...(since cc_state always has a : we must quote it
  209.                 setCookie(g_cc_state, "\"" + newSession + "\"", 0, getPath());
  210.         }
  211. }
  212.  
  213. function getSessionValue(sName) {
  214.         // Get the current session
  215.         var sSession = getSessionString();
  216.         var sRetValue = null;
  217.         // If we have no session or it is empty then return null.
  218.         if (sSession != "" && sSession != "null" && sSession != null) {
  219.                 var aSession = [];
  220.                 aSession = sSession.split(sParamDelimiter);    
  221.                
  222.                 var n = aSession.length;
  223.                 // unpack the session and update the specified parameter
  224.                 for (var i = 0; i < n; i++) {  
  225.                         if (aSession[i].indexOf(sName) == 0) {
  226.                                 sRetValue = aSession[i].substring(aSession[i].indexOf(sNameValueDelimiter) + sNameValueDelimiter.length, aSession[i].length);
  227.                                 break;
  228.                         }
  229.                 }
  230.         }
  231.         return sRetValue;
  232. }
  233.  
  234. function resetStateParam(sName) {
  235.         // If we have no session or it is empty then return null.
  236.         var sCurrentValue = getSessionValue(sName);
  237.         if (sCurrentValue) {
  238.                 setStateValue(sName, "");
  239.         }
  240. }
  241.  
  242. function updateSession() {
  243.         // Updates the browser session to control caching.
  244.         var currentValue = parseInt(getSessionValue("us"), 10);
  245.         var newValue = isNaN(currentValue) ? 0 : (currentValue + 1);
  246.         setStateValue("us", newValue);
  247. }

Raw Paste


Login or Register to edit or fork this paste. It's free.