cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。

 

cookies
1.域+path+name 标识
2.name+value, 有服务器产生,发回client,保存在client (http 的set-cookies 字段)
3.每次http请求都会发送 Cookies中 “域+path”相同的所有cookie
4.大多数浏览器Cookie最大约为4K
5.浏览器可能还限制了用户计算机存储的cookie数量(如允许每个站点最多存储20个cookies,超过则删除旧的;有些浏览器还对所有站点的cookie总数作出限制,如300)

  

localStorage
1.域相关
2.永久保存在本地(client) 3.容量无限制 4.数据不会过期,除非由于security 原因或者用户请求删除

localStorage主要用到的
length:本地存储数据的个数
setItem(key,value):向key字段写入value数据或者通过.的方式(localStorage.name)
getItem(key):去key字段的数据或者通过.的方式(localStorage.name)
removeItem(key):移除key字段
clear():清空该域下的所有数据
key(i):获取第i个数据的key



 

;(function () {
    var Conts = '_keep_'
    var ls = localStorage

    var _storage = {
            get: function (key) {
                return ls.getItem(Conts + key)
            },
            set: function (key, value) {
                ls.setItem(Conts + key, value)
            },
            clear: function () {
                ls.clear()
            },
            remove: function (key) {
                ls.removeItem(Conts + key)
            },
            key: function (i) {
              return ls.key(i)
            },
            len: function () {
               return ls.length
            }
        }

    var _cookie = {
            get : function (key) {
                var strcookie = document.cookie
                if (strcookie != "") {
                    key = Conts + key
                    var arrcookie = strcookie.split("; ")
                    for ( var i = 0; i < arrcookie.length; i++) {
                        var arr = arrcookie[i].split("=")
                        if (arr[0] == key) {
                            return arr[1] || ""
                        }
                    }
                }
                return ""
            },
            set : function (key, value, expires, domain) {
                var ep = ''
                var date = new Date()
                var domain =  typeof domain === 'boolean' ? this.getDomain() : (domain ? domain : '')
                key = Conts + key
                expires = (expires || 365) * 24 * 3600                
                date.setTime(date.getTime() + expires)
                ep = date.toGMTString()
                domain = domain ? (';domain=' + domain) : ''
                document.cookie = key + "=" + value + ";expires=" + ep + domain + ";path=/"
            },
            clear : function () {
                var _this = this
                this.forEach(this.allKey(), function () {
                    _this.remove(this.okey)
                })
            },
            remove: function (key) {
              this.set(key, '', -1)
            },
            getDomain : function () {
                var domain = document.domain
                var index = domain.lastIndexOf('.')
                index = domain.substring(0, index).lastIndexOf('.')
                if (index == -1) {
                    return domain
                }
                return domain.substring(index + 1)
            },
            forEach: function (arr, fn) {
                for (var i = 0, len = arr.length; i < len; i++) {
                    if (fn.call(arr[i], i) === false) {
                        break;
                    }
                }
            },
            allKey: function () {
                var ck = document.cookie.split(';')
                var arr = []
                var len = Conts.length;
                this.forEach(ck, function () {
                    var _this = this.replace(/^\s*/,'')
                    var str = _this.substr(0, len)
                    if (str === Conts) {
                        var temp = _this.split('=')
                        var obj = {}
                        obj[temp[0]] = temp[1]
                        obj.key = temp[0]
                        obj.okey = temp[0].substr(len)
                        arr.push(obj)
                    }
                })
                return arr
            },
            key: function (i) {
                var temp
                var allKey = this.allKey()[i]
                for(var i in allKey) {
                    temp = allKey[i]
                }
                return temp
            },
            len: function () {
                return this.allKey().length
            }
        }
        window.Keep = window.localStorage ? _storage : _cookie    
})();

  

  

 

posted on 2014-11-15 17:58  u69868291  阅读(257)  评论(0编辑  收藏  举报