Node学习(九)064-会话技术简介之session的设置和获取——设置与获取之express-session模块& session有效期& 删除session& cookie和session的原理

Node学习(九)064-会话技术简介之session的设置和获取——设置与获取之express-session模块& session有效期& 删除session& cookie和session的原理

3. session技术

3.1 session介绍

  • 因为cookie是保存在客户端的数据,不够安全,所以出现了session。
  • session会将数据保存到服务器端(保存在文件、内存服务器或数据表中),安全性就可以得到保证。

3.2 设置/读取session

express设置session时,需要使用第三方模块 — express-session

npm i express-session

# 也可以使用 cookie-session 模块
https://github.com/expressjs/session

使用步骤:

  1. 加载 express-session 模块

  2. 将session注册为中间件(这样,当有请求过来的时候,都会先经过中间件)

  3. 使用 req.session 对象设置/读取session

//1. 加载 express-session 模块
const session = require('express-session');
//2. 配置项
let conf = {
    
    
    secret: '4ey32erfyf3fgpg',   //加密字符串。 使用该字符串来加密session数据,自定义
    resave: false,               //强制保存session即使它并没有变化
    saveUninitialized: false     //强制将未初始化的session存储。当新建了一个session且未
    							 //设定属性或值时,它就处于未初始化状态。
};
//3. 注册为express-session中间件
app.use(session(conf));

app.get('/test1', (req, res) => {
    
    
    // 设置session
    req.session.yzm = '7890';
    res.send('session设置成功');
});

app.get('/test2', (req, res) => {
    
    
    console.log(req.session.yzm);
    res.send('获取成功');
});

app.get('/test3', (req, res) => {
    
    
    console.log(req.session.yzm);
    res.send('获取成功');
});

4)在session文件夹下,执行命令,启动服务

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

服务启动效果

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

3.3 session有效期

  • 当服务器关闭后,session消失
  • express-session会将session保存在内存中,每次重启服务器时即使没有关闭浏览器session也会消失

学习阶段都是开发环境,服务器一会关闭了,一会开启了。

开发环境中,session是保存在内存中的,所以关闭服务器,session就消失了

生产环境中session的有效期要设置在配置项中,cookie: {maxAge: 3600000},session应该保存到内存服务器中

3.4 删除session

核心: req.session.destroy() 销毁所有session

// 删除所有session
req.session.destroy((err) => {
    
    
    if (err) {
    
    
        // 删除失败
    } else {
    
    
        // 删除成功
    }
});

3.5 session 的有效范围

在一个网站中设置了session,则整个网站都能找到这个session

4. cookie、session原理

cookie原理:

在这里插入图片描述

session原理:

服务器端会为每个用户(浏览器)各自保存一个session(文件)

下次用户再来访问的时候,就不能确定该用户的session是哪一个了

所以当服务器保存session之后,会以cookie的形式告诉浏览器,你的session是哪一个

下次再来访问服务器的时候,浏览器就会带着它自己的session号去访问,服务器就可以找到对应的session了

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44867717/article/details/129807654