当前位置:网站首页 > Node.js开发 > 正文

Node学习(九)063-会话技术简介之cookie的设置和获取——会话控制的分类之cookie-保存客户端(浏览器)、session-保存服务器 & cookie的设置与获取 & cookie有效期

Node学习(九)063-会话技术简介之cookie的设置和获取——会话控制的分类之cookie-保存客户端(浏览器)、session-保存服务器 & cookie的设置与获取 & cookie有效期

1. 会话技术概况

1.1 http协议的缺陷

http是无状态的,就是无记忆,不能让同一浏览器和服务器进行多次数据交换时,产生业务的连续性。

目前,每次请求都是独立的,没有关系的。所以服务器和客户端都不知道是否是登录过的。

1.2 什么是会话控制

会话控制就是弥补http无记忆的缺陷的。能够将数据(用户的身份等)持久化的保存在客户端(浏览器)或者服务器端,从而让浏览器和服务器进行多次数据交换时,产生连续性。

1.3 会话控制的分类

  • cookie: 将数据持久化保存到客户端(浏览器)
  • session: 将数据持久化保存到服务器端

在这里插入图片描述

2. cookie技术

2.1 什么是cookie

  • cookie是将数据持久化存储到客户端的一种技术。
  • 网站可以将数据写到浏览器中, 一个网站最多能在一个浏览器写20个cookie。现在的浏览器能写的更多
  • 一个浏览器能够设置的总cookie数最多为300个,每个不能超过4kb。
  • cookie既能保存在文件中,也能保存在内存中。
  • 可以通过浏览器查看某个网站的cookie

在这里插入图片描述

2.2 设置cookie

  • 核心: cookie是服务端设置的,随着响应头返回给浏览器的信息,浏览器要将这些信息记录下来
  • 如何设置cookie
    • 使用 res.setHeader
    • 使用 res.writeHead
    • 如果使用的是express框架,可以使用res.set()方法
  • cookie设置格式:key=value;expires=time
    • key: cookie的名称
    • value: 名称对应的值
    • expires: 有效期
// 所有的设置cookie,都必须写到一个请求中 //1. 使用 http模块中的setHeader 方法,它可以和sendFile一起使用 res.setHeader('set-cookie', 'id=101'); //设置单个cookie res.setHeader('set-cookie', ['id=101', 'name=zs']); //设置多个cookie //2. 使用 http模块中的writeHead 方法,它不能和sendFile及send一起使用 res.writeHead(200, { 
    'content-type': 'text/html;charset=utf-8', 'set-cookie': ['type=10', 'name=my'] })//3. 使用 express模块中的set 方法,该方法是express封装的方法,它可以和sendFile一起使用 res.set({ 
    'set-cookie':['goodsName=xiaomi 6', 'goodsPrice=3999'] })//4. 设置cookie时,指定有效期 //注意:要使用UTC时间,使用 toUTCString()方法转换 //设置有效期为 1小时 const expiresTime = new Date(Date.now() + ).toUTCString(); res.set({ 
    'set-cookie':['goodsName=xiaomi 6;expires=' + expiresTime, 'goodsPrice=3999'] }) 

2.3 读取cookie

一旦网站在浏览器设置好cookie之后,浏览器再访问网站(任何页面)时,浏览器会将cookie信息随着请求头一起发送给服务器。所以我们在服务器端通过 req.headers.cookie 可以获取到cookie的信息。

// 加载express const express = require('express'); // 创建app对象 const app = express(); // 监听端口,开启服务 app.listen(3000, () => console.log('服务启动了')); app.get('/test1', (req, res) => { 
    // 设置cookie // 这里设置一个变量 let vcode = '2N9i'; // res.setHeader('Set-Cookie', 'yzm='+vcode); let time = new Date(Date.now() + 60000*2).toUTCString(); res.set({ 
    // 'set-cookie': 'yzm=aaaa' 'set-cookie': ['age=20;expires=' + time, 'name=zs', 'sex=f'] }); res.send('设置成功'); }); app.get('/test2', (req, res) => { 
    // 获取cookie // 下面的这个接口能否使用上面接口定义的变量 console.log(req.headers.cookie); res.send('获取成功'); }); app.get('/test3', (req, res) => { 
    // 获取cookie // 下面的这个接口能否使用上面接口定义的变量 console.log(req.headers.cookie); res.send('获取成功'); }); 

2.4 cookie有效期

  • 默认情况是,当关闭浏览器,cookie即消失
  • 如果设置了cookie的有效期(expires),则cookie会在指定的有效期内一直存在,无论浏览器是否关闭
// 设置cookie的有效期为1小时 // 方式: 先找到一小时之后的时间戳,再转为utc时间 // Date.now(): 获取当前时间点的时间戳 (毫秒数) // Date.now() + : 一小时之后的毫秒数 // new Date(Date.now() + ).toUTCString(): 将时间戳转为时间格式(UTC时间格式) let time = new Date(Date.now() + ).toUTCString(); // 设置cookie,有效期为1个小时 res.set({ 
    'set-cookie': ['name=zs;expires='+time] }); 

cookie实例

1、新建cookie文件夹,并在当前文件夹下安装express包,搭建express服务器

npm i express 

2、在cookie文件夹下,新建app.js文件作为服务器

cookie/app.js

简略版

// 加载express const express = require('express'); // 创建app对象 const app = express(); // 监听端口,开启服务 app.listen(3000, () => console.log('服务启动了')); 

详细版

// 加载express const express = require('express'); // 创建app对象 const app = express(); // 监听端口,开启服务 app.listen(3000, () => console.log('服务启动了')); app.get('/test1', (req, res) => { 
    // 设置cookie // 这里设置一个变量 let vcode = '2N9i'; // res.setHeader('Set-Cookie', 'yzm='+vcode); let time = new Date(Date.now() + 60000*2).toUTCString();// 设置cookie有效时间 res.set({ 
    // 'set-cookie': 'yzm=aaaa' 'set-cookie': ['age=20;expires=' + time, 'name=zs', 'sex=f'] }); res.send('设置成功'); }); app.get('/test2', (req, res) => { 
    // 获取cookie // 下面的这个接口能否使用上面接口定义的变量 console.log(req.headers.cookie); res.send('获取成功'); }); app.get('/test3', (req, res) => { 
    // 获取cookie // 下面的这个接口能否使用上面接口定义的变量 console.log(req.headers.cookie); res.send('获取成功'); }); 

3、在cookie文件夹下,执行命令,启动服务

nodemon ./app.js #或者 node ./app.js 

服务启动效果

在这里插入图片描述

页面验证效果——test1设置成功、test2获取成功

在这里插入图片描述

test2获取cookie

在这里插入图片描述

获取设置的cookie

在这里插入图片描述

注:

如果关闭浏览器,重新在浏览器中输入127.0.0.1:3000/test2,虽然显示获取成功,但无法获取到cookie

1

在这里插入图片描述

2

在这里插入图片描述

浏览器中输入127.0.0.1:3000/test3,node控制台可以打印到test3数据

在这里插入图片描述

test3页面示意流程

在这里插入图片描述

cookie查看效果

在这里插入图片描述

设置cookie有效时间

在这里插入图片描述
注:设置了cookie有效期后,关闭浏览器后,输入地址,也可以继续拿到cookie数据

到此这篇Node学习(九)063-会话技术简介之cookie的设置和获取——会话控制的分类之cookie-保存客户端(浏览器)、session-保存服务器 & cookie的设置与获取 & cookie有效期的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • Node学习(九)064-会话技术简介之session的设置和获取——设置与获取之express-session模块& session有效期& 删除session& cookie和session的原理2024-11-30 18:54:06
  • Node学习(九)065-会话技术简介之cookie和session的优缺点——cookie-优点是节省服务器空间,缺点不安全 & session-优点是安全,缺点需要服务器空间 & 语法之设置和获取2024-11-30 18:54:06
  • Node学习(九)07-使用验证码——必须登录才能访问页面 & 模糊搜索的时候重置分页页码2024-11-30 18:54:06
  • Node.js 网络通信(一)——网络通信相关概念、网络七层模型、mac 地址之ip地址、Port 端口号、域名 & TCP-传输控制协议、UDP-用户数据报协议、Socket套接字2024-11-30 18:54:06
  • Node.js 网络通信(二)01-构建TCP服务——TCP全名为传输控制协议,属于传输层协议,如http协议 & 显著特征是在传输之前需要三次握手形成会话 & Socket通信模型2024-11-30 18:54:06
  • Node学习(九)061-管理系统之登录和注册——md5加密 & 前端注册成功跳转登录页 & 前端登录成功跳转首页 & node服务器之post接口写法2024-11-30 18:54:06
  • Node学习(九)023-管理系统之添加英雄——文件上传-multer第三方模块之multer简介、multer配置、multer使用 & 使用myupload.single() 方法作为接口的中间件2024-11-30 18:54:06
  • Node学习(八)02-Node中的模块化——用module.exports实现模块化-封装并导出db.js模块之mysql增删改查& 步骤之连服务器、键值照应、封装导出模块、导入模块并打印服务器数据2024-11-30 18:54:06
  • Node学习(八)01-Node中的模块化——一个js文件就是一个模块& js中声明的属性和方法挂载global对象下则是全局作用域&module.exports导出属性和方法&require导入模块2024-11-30 18:54:06
  • Node学习(五)021-处理静态资源——中间件是express最大特色-app.use() & 有三个基本参数req、res、next & 自定义中间件处理静态资源文件-sendFile异步读取文件2024-11-30 18:54:06
  • 全屏图片