在说cookie之前先说一下http,
HTTP协议是一个无状态的协议,服务器无法区分出多次请求是否发送自同一客户端,而我们在现实的开发中,往往还需要识别出请求是否发送自同一个用户,这个需求可以用会话控制解决。
会话控制主要有两种方式:Cookie 和 Session;
会话:一次打开关闭浏览器的过程。(关闭浏览器是关闭所有页面,不是关闭请求的页面);
Cookie
cookie的使用流程和平时我们看电影相似,我们看电影的步骤:
1,首先电影院制作票
2,用户去电影院拿票
3,用户带着票去电影院
4,电影院检查票
Cookie相当于服务器发送给浏览器的一张“票”,浏览器收到这个票以后,会自动将其保存,当其再次向服务器发送请求时,会将“票”发回,这样服务器就可以根据"票"来识别出不同的浏览器了。
一、Cookie的使用流程:
1.服务器制作Cookie
2.浏览器访问服务器,获得Cookie
3.浏览器再次访问服务器,并将Cookie发回
4.服务器根据Cookie来识别浏览器
二、cookie再明确一点,cookie就是 请求头/响应头的一部分:
浏览器请求服务器,服务器以响应头的形式将Cookie发送给浏览器,
浏览器收到以后会将Cookie保存,当其再次访问服务器时,它会以请求头的形式将Cookie发回给服务器。
- Cookie以响应头的形式发送给浏览器
Set-Cookie: username=sunwukong; Path=/
- 浏览器收到该响应头,会自动将Cookie保存,在下次发送请求时将Cookie发回
- Cookie以请求头的形式发回给服务器
Cookie: username=sunwukong
- 服务器可以根据该请求头,来读取Cookie进而识别出不同的浏览器
三、Cookie的作用:
1.保持用户的登录状态
2.保存用户的用户名
3.广告,例如:第一次在百度搜素信息,百度服务器会把关键字保存到cookie中,返回客户端;
当用户第二次访问百度时,百度的广告服务器会取出cookie,获取其中的信息,然后智能推送给用户相应的广告
。。
四、cookie不足:
1.cookie都是明文保存的,不太安全,容易泄露隐私
2.每个浏览器对cookie的数量和大小都是有限制,不能使用cookie保存过多的数据
3.cookie由服务器创建发送给浏览器,浏览器在访问时再次将cookie发回给服务器,
如果cookie中保存内容过的话,会导致每次请求的速度下降,降低用户的体验
五、cookie的使用:
步骤:
1.下载安装
npm i cookie-parser --save
2.引入
var cookieParser = require("cookie-parser");
3.设置为中间件
app.use(cookieParser());
var express = require("express");
var app = express();
var cookieParser = require("cookie-parser");
app.use(cookieParser());
app.get("/testCookie",function (req , res) {
//修改/删除用户的 username 的cookie
//cookie一旦发送给浏览器,则我们就不能再修改,但是可以使用同名的Cookie对原有的Cookie进行替换
//res.cookie("username","zhubajie");
//删除cookie
//使用有效期为0的cookie替换原来的cookie,从而删除cookie
//res.cookie("username","zzz",{maxAge:0});
//删除指定的cookie
res.clearCookie("username");
res.send("新的cookie已经发送~~~");
});
//创建一个路由,用来读取浏览器发回的Cookie
app.get("/getCookie",function (req , res) {
//获取浏览器发送的Cookie
//var cookie = req.get("Cookie");
//当引入cookie-parser中间件以后,req.cookies自动变成一个对象,对象的属性是Cookie的名字 值就是cookie的值
//我们就可以通过req.cookies 来读取Cookie了
console.log(req.cookies.username);
//console.log(typeof cookie);
res.send("getCookie发回的内容~~~" + req.cookies.username);
});
//创建一个路由
app.get("/sendCookie" , function (req , res) {
//创建一个Cookie
//res.cookie(name, value [, options])
//res.cookie("username","sunwukong");
/*res.cookie("age","18");
res.cookie("gender","male");*/
/*
会话:一次打开关闭浏览器的过程
Cookie不会永远在浏览器中保存,默认有效期是一次会话,关闭浏览器以后Cookie自动失效
*/
//设置一个有效期为1分钟的cookie
//res.cookie("username","sunwukong",{maxAge:1000*60});
//设置一个永久有效的cookie
res.cookie("username","sunwukong",{maxAge:1000*60*60*24*365*10});
//cookie将在响应报文发送时,一起发送给浏览器
res.send("Cookie已经发送~~~");
});
app.listen(3000,function () {
console.log("ok");
});
大家也可以参考express的官网,查看API查看cookie相关用法