cookie cookie cookie
1.什么是cookie
cookie是由服务器发送给客户端,也就是浏览器的信息(小量的)
2.用来干什么
cookie是键值对形式存储的少量信息,帮助我们跟踪会话,一般该信息记录用户身份。cookie也常常用来记录购物车的商品信息,例如:数量 ,记录用户访问次数等等。
3.原理是什么
当客服端请求服务器时,如果服务器需要记录此用户的状态,就会使用response向客户端浏览器颁发一个cookie。此时,客户端浏览器就会把cookie保存起来,当浏览器请求服务器时,浏览器就会把请求的网址和cookie一起提交给服务器,服务器通过检查cookie来获取用户的状态。
cookie 的特点
1. 按照域名存储
+ 你在哪一个域名下存储的内容, 就在哪一个域名下使用
+ 其他域名都用不了
+ 和资源路径地址没有关系
2. 存储大小有限制
+ 4KB 左右
+ 50 条左右
+ 或者的关系
3. 时效性
+ 默认是会话级别的时效性(关闭浏览器就没有了)
+ 可以手动设置, 七天后, 两个小时以后
4. 请求自动携带
+ 当你的 cookie 空间里面有内容的时候
+ 只要是当前域名下的任意一个请求, 都会自动携带 cookie 放在请求头里面
=> cookie 里面有多少自动携带多少
+ 如果 cookie 空间中没有内容, 就不会携带了
5. 前后端操作
+ 前端可以通过 js 操作 cookie 空间进行增删改查
+ 后端也可以通过任何后端语言进行 cookie 空间的增删改查
cookie的添加
当我们获取客户端的cookie时,只能获取maxAge与value属性,其他属性都不会被提交。
Cookie cookie=new Cookie("username","Tom");//新建一个Cookie对象
cookie.setMaxAge(24*60*60);//设置 过期时间为一天 单位为秒
response.addCookie(cookie);//保存cookie到客户端
cookie的删除
当我们删除某个cookie时,只需要新建一个只有name和value不一样的同名cookie,然后添加到response中覆盖掉之前的cookie。
Cookie cookie=new Cookie("username","Tom");//新建一个Cookie对象
cookie.setMaxAge(0);//设置 过期时间为0 表示将要删除
response.addCookie(cookie);//执行添加后就从response里删除
cookie的修改
当我们修改某个cookie时,同样只需要新建一个只有value属性不一样的同名cookie,然后添加到response中覆盖掉之前的cookie。
Cookie cookie=new Cookie("username","Tom");//新建一个Cookie对象
cookie.setMaxAge(24*60*60);//设置过期时间
response.addCookie(cookie);//执行添加后就从response里覆盖了修改
注意:我们修改和删除cookie时,新建的cookie除value ,maxAge之外的所有属性,例如name、path、domain等,都要与cookie完全一样。否则,浏览器将视为两个不同的cookie,从而导致修改或者删除失败。
JS操作cookie
由于cookie是保存在客户端的,所以浏览器可以使用脚本(JS)等来操作cookie。
封装的cookie函数
function setCookie(key,val,ops){
ops = ops || {};
let e = "";
if(ops.expires){
var d = new Date();
d.setDate( d.getDate() + ops.expires );
e = ";expires="+d;
}
let p = ops.path ? ";path="+ops.path : "";
document.cookie = `${key}=${val}${p}${e}`;
}
function getCookie(key){
let strC = document.cookie;
let arrC = strC.split("; ");
for(var i=0;i<arrC.length;i++){
if(arrC[i].split("=")[0] === key){
return arrC[i].split("=")[1];
}
}
return "";
}
function removeCookie(key,ops){
ops = ops || {};
ops.expires = -1;
setCookie(key,"qweqwezzdasd",ops);
}
安全问题:cookie中所有的内容,因为都是存在本地的文本,所以都是明文,只要能看到你的本地,就有可能看到你的cookie,所以在项目中千万不要在cookie中直接存账号密码
cookie工作场景:
cookie自身其实对工作环境没有要求
但是cookie会随着http发往服务器
使用cookie的时候,是不是需要记录客户端和服务器之间的信息
客户端是浏览器,服务器是本地服务器
所以导致,cookie最好也在服务器环境中使用