Cookie
Cookie
http(网络传输协议)https(安全)
特点:
无状态 (不知道访问者是谁)
无连接 (不会建立完整的连接 访问一过去 数据已返回连接就断了)
长连接/短连接 (key-alive属性来指定的)
既然我们的http协议是无状态的 那么我们怎么区分对应的访问者(孕育而出了一个sessionID 来做区分)
他访问了我 我给你一个对应的sessionID 他访问了我我同样给他一个sessionID (这个时候我们就可以通过这个sessionID来做区分)
这个sessionID是怎么给到你的呢?
他是通过在访问的时候 给你分发一个sessionID 保存到你的机器上 (存在于你的浏览器上 cookie)sessionID是依赖于cookie进行存储的
cookie会随请求一起过去
这个时候我们的http的无状态就解决了
Cookie
cookie是浏览器提供的一个存储数据的空间。
正常情况下,我们在页面中动态给div添加一个内容,当时可以在div中看到这个内容,但是等刷新页面的时候,这个
div中的内容又成了空,也就是说,我们动态添加的数据是不持久的。而cookie这个浏览器提供的空间可以让数据持
久。也就是说存在这个空间中的数据等下次刷新页面,数据还是存在的。 对应的Cookie存储对应的sessionID,Cookie相当于一个容器(容器大小只有4k),在浏览器中存储少量的数据,利用Cookie可以实现一些保存数据的功能。
Cookie是一个对象 使用document.cookie来获取对应的cookie
document.cookie = 'name=张三;';
Cookie设置语法:
document.cookie = '键=值;expires=失效时间;path=能使用当前cookie的路径';
var date = new Date(); date.setTime(date.getTime()-1000*60*60*8+8000); // 当前时间的8秒之后
document.cookie = 'age=20;expires='+date+";path=/"; // 斜杠代表服务器的根目录
cookie识别的时间是格林威治时间,而我们获取到的时间是东8区的时间,所以需要减去8个小时,才是当前时间。
此时,在等待8秒之后,cookie就失效了。如果不设置失效时间的话,cookie默认是在当前页面关闭的时候失效,也
称为“会话级别”。
cookie不能一次性设置多个键值对,要设置多个cookie就设置多次:
document.cookie = 'name=zhangsan';
document.cookie = 'age=30';
获取cookie:
var cookie = document.cookie;
console.log(cookie); // name=zhangsan; age=30
获取到的多条cookie中间使用分号和空格隔开。
修改cookie,就是重新设置。
删除cookie,就是将失效时间设置为当前时间以前。
var date = new Date(); date.setTiem(date.getTime()-1000*60*60*8-1); // 当前时间的上一秒
document.cookie = 'name=zhangsan;expires='+date;
对应的属性
键=值 (名字=值)
expires 过期时间(关闭浏览器失效)*
path 访问路径(指定对应的路径携带cookie)
domain 跨域 (可以跨域的域名)
secure 安全
URI编码和解码
encodeURIComponent 编码
decodeURIComponent 解码
增删改查
添加 直接赋值
document.cookie = "key=value;"
获取 采用读取字符串的形式
console.log(document.cookie.split(";")[0].split("=")[1]) //拿到value值
删除 设置过期时间
document.cookie = "key=value;expires="+new Date()
修改 重新设置就是修改
document.cookie = "key=hello;"
cookie的特性
Cookie是不安全的
Cookie是可篡改和伪造的
Cookie是以字符串存储的,有很多数据类型是不支持的
Cookie的最大数据量限制为4kb
Cookie会随请求发送
- cookie的最大数量限制在50条(不一定,现在浏览器都比较高端,现在的谷歌可以设置150条左右)
- cookie有时效性,一般是会话级别(浏览器关闭就过期)
- 有域名限制,在当前域名下设置的cookie,只能在当前域名下读取
封装cookie操作
设置cookie封装
function setCookie (key, value, expires) {
const time = new Date()
time.setTime(time.getTime() - 1000 * 60 * 60 * 24 * 8 + expires*1000) // 用于设置过期时间
document.cookie = `${key}=${value};expires=${time};`
}
读取cookie封装:
function getCookie(key) {
const cookieArr = document.cookie.split(';')
let value = ''
cookieArr.forEach(item => {
if (item.split('=')[0] === key) {
value = item.split('=')[1]
}
})
return value
}
删除cookie封装:
function delCookie(name) {
setCookie(name, 1, -1)
}
cookie和localStorage的区别
localStorage容量大于cookie
localStorage存储的位置和cookie不是一个地方
localStorage对应的不会随请求携带(本地缓存)
cookie 在后续的框架中也会使用 但是他使用的是对应的库(cookie.js)
https://www.mianshigee.com/project/cookie-js/
localStorage的方法
getItem(key) 获取元素
setItem(key,value) 设置元素
removeItem(key) 移除元素
JSON
JSON是一种数据格式(json字符串) 他通用我们对应的网络传输(xml)他是一种数据格式 而在对应的JavaScript他是一种数据类型
json俩种显示方式
对象 {} .key
数组 [] 使用下标
var jsonObj = {}
var jsonArray =[]
反序列化操作 (将字符串变成对象)
JSON.parse() *
eval()
var str = '{"name":"张三","age":12}';
var obj = JSON.parse(str);
console.log(obj); // {"name":"张三","age":12} 这是个对象
序列化操作 (将对象变成json格式的字符串)
JSON.stringify() *
var obj = {
"name":"张三",
"age":12
}
var str = JSON.stringify(obj);
console.log(str); // {"name":"张三","age":12} 这是个字符串
localstorage和cookie存储的格式(字符串)以后再存储数据的时候直接存储json格式字符串 取出的时候利用反序列化转为对象