Cookie

  在说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相关用法

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值