在项目中,前端的Cookies往往存一些用户的登录信息和AutoSuggest(基础信息)的东西。

如国家简写,Currency的Code等。

但是Cookies的空间是比较小的,多个用户登录一个系统,或者浏览器的cookies被其他应用占用,这时候Cookies的使用就变得很紧张。

Solution(解决方法)

1. 可以把项目中的一些信息有HTML5中的LocalStorage来承担部分的Cache工作,减轻Cookies的负担。

因为LocalStorage号称有10MB的空间。相比Cookies的空间大很多。

不同浏览器间 cookie 总大小也不同:

  1. Firefox 和 Safari 允许 cookie 多达 4097 个字节, 包括名(name)、值(value)和等号。
  2. Opera 允许 cookie 多达 4096 个字节, 包括:名(name)、值(value)和等号。
  3. Internet Explorer 允许 cookie 多达 4095 个字节, 包括:名(name)、值(value)和等号。

注:多字节字符计算为两个字节。在所有浏览器中,任何 cookie 大小超过限制都被忽略,且永远不会被设置。

 

 

  1. DCS.Common.suggestCookieStore = function(userId,time){ 
  2.         //------------for cookie initialization 
  3.         var _rsProvider =  DCS.Common.getCookieStore(userId,time); 
  4.         this.userId = userId; 
  5.         this.KeySeperator = '-.'
  6.         this.ItemSeperator = '/.'
  7.         var obj = _rsProvider.get(NSConst.Cookie.DCS) || {}; 
  8.         var tmp = obj[this.userId];  
  9.         obj = {}; 
  10.         obj[this.userId] = tmp; //delete other users cookie 
  11.         this.dcsObj = obj; 
  12.         this.store = function(key,obj){ 
  13.              this.clear(key); 
  14.              var allStr = this.dcsObj[this.userId] || ''
  15.              var str = ''
  16.              if(allStr && allStr != ''
  17.                     str += this.ItemSeperator; 
  18.              str += key+this.KeySeperator+_rsProvider.encodeValue(obj); 
  19.              var length = str.length; 
  20.              if((length+DCS.Common.getCookieLength([NSConst.Cookie.DCS])) > 3300) 
  21.                             this.clearLRU(); 
  22.                  if((length+DCS.Common.getCookieLength([NSConst.Cookie.DCS])) > 3300) 
  23.                             this.clearLRU(); 
  24.              var allStr = this.dcsObj[this.userId] || ''
  25.                  allStr += str; 
  26.              this.dcsObj[this.userId] = allStr; 
  27.              _rsProvider.set(NSConst.Cookie.DCS,this.dcsObj); 
  28.           }; 
  29.           this.clearLRU = function(){ 
  30.                 var allStr = this.dcsObj[this.userId]; 
  31.                 if(allStr && allStr.length > 2){ 
  32.                     var start = allStr.indexOf(this.ItemSeperator) ; 
  33.                     if(start > 0 && (start+2) < allStr.length){ 
  34.                         allStr = allStr.substring(start+2); 
  35.                       this.dcsObj[this.userId] = allStr; 
  36.                         _rsProvider.set(NSConst.Cookie.DCS,this.dcsObj); 
  37.                     } 
  38.             } 
  39.           }; 
  40.           this.get = function(key){ 
  41.                 var allStr = this.dcsObj[this.userId]; 
  42.               if(allStr){ 
  43.                   if(allStr.length > (key.length+2) && allStr.indexOf(key+this.KeySeperator) > -1){ 
  44.                      var keyStr = key+this.KeySeperator; 
  45.                    var start = allStr.indexOf(keyStr); 
  46.                    var keyLength = keyStr.length; 
  47.                    var end = allStr.indexOf(this.ItemSeperator,start); 
  48.                    if(end < 0){ 
  49.                             end = allStr.length; 
  50.                    } 
  51.                    var result = allStr.substring(start+keyLength,end); 
  52.                    return _rsProvider.decodeValue(result); 
  53.                } 
  54.               } 
  55.               return null
  56.           }; 
  57.           this.clear = function(key){ 
  58.              var allStr = this.dcsObj[this.userId]; 
  59.              if(allStr){ 
  60.                        if(allStr.length > (key.length+2) && allStr.indexOf(key+this.KeySeperator) > -1){ 
  61.                           var keyStr = key+this.KeySeperator; 
  62.                           var start = allStr.indexOf(keyStr); 
  63.                           var end = allStr.indexOf(this.ItemSeperator,start); 
  64.                           if(end < 0){ 
  65.                                                         if(start > 2) 
  66.                                                               start -= 2; //if not the first item, need clear the sepeartor 
  67.                                           allStr = allStr.substring(0,start); 
  68.                           } 
  69.                           else
  70.                                          allStr = allStr.substring(0,start)+allStr.substring(end+2,allStr.length); 
  71.                           } 
  72.  
  73.                           this.dcsObj[this.userId] = allStr; 
  74.                            _rsProvider.set(NSConst.Cookie.DCS,this.dcsObj); 
  75.                 } 
  76.              } 
  77.       }; 
  78.       this.clearAll=function(){ 
  79.           _rsProvider.clear(NSConst.Cookie.DCS); 
  80.       } 
  81.     }; 


 


 

 

 

2.  也可以用JS实时监控Cookie的使用情况,万一cookie使用超过预警值,那就要强制清空然后update。

至于怎么实现,项目中有具体的代码。