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
使用步骤:
-
加载 express-session 模块
-
将session注册为中间件(这样,当有请求过来的时候,都会先经过中间件)
-
使用
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了