存于客户端,因为http协议是无状态的,只要客户端与服务端数据交换完,就会断掉连接,若是再请求 就再次连接,而服务器是没法保存这种连接的状态,只有不停地连接、断连接,因此须要cookie来作一个身份认证,再次请求的时候服务器会根据这个身份id进行用户判断。json
但要注意cookie是不可跨域的,他会根据域名来区分是向哪一个服务器发送数据。api
其次,cookie不能存一些敏感信息, 由于经过浏览器获取cookie很方便,很容易泄露一些我的信息,若是想存 最好是对数据进行加密跨域
cookie的一些api,经过本身封装的例子看浏览器
var Cookie = { //分装获取的方法 Cookie.get('name') get: function(key){ var cookiestr = document.cookie; //读取本地的cookie var list = cookiestr.split("; "); for(var i=0; i<list.length; i++){ var kvs = list[i].split("="); if(kvs[0]==key) { return kvs[1]; //查询是否存在 存在返回 不然返回null } } return null; }, //封装写入cookie的方法 包括内容、有效期、路径,是否安全传输 set: function(key,value,expires,path){ if( (typeof expires == "number") || (typeof expires == "string")) { expires = Number(expires); if(isNaN(expires)) { expires = undefined; } else { var d = new Date(); d.setDate(d.getDate()+expires); expires = d; } } if( !(expires instanceof Date) && typeof expires == "object") { expires = undefined; } //cookie的写入 用json字符串形式 调用的时候用Cookie.set('name','zhangsan','/') document.cookie = key+"="+value+";" + (expires?"expires="+expires+";":"") + (path?"path="+path+";":""); } }
sessionStorage安全
是用户从打开回话窗到关闭会话窗这一段时间有效,关闭以后存的数据就会被删除 sessionStorage.setItem('name','alice'); var username = sessionStorage.getItem('name') sessionStorage.remove('name') sessionStorage.clear()
localStorage 会一直存在浏览器中 除非人工清除 方法同上服务器
其次,咱们能够对localstorage和sessionStorage的属性值进行遍历cookie
var storage = window.localStorage; var length = storage.length; for(let i=-;i<length;i++){ console.log(storage.key(i),storage.getItem(key)) }
三者都存在客户端 并且同源,同协议 同域名 同端口session
cookie会在http请求中携带,会在服务器和客户端间传递,因此cookie会有大小限制,不能超过4k,并且存在在设定的path下。加密
sessionStorage和localStorage只会存在本地,大小要比cookie大,其中sessionStorage是仅在当前的会话窗口有效,不是全部窗口均可以共享数据的。其它两个是真个浏览器均可以数据共享。localstorage