01. session的定义:
session指会话,但是后端人员常说的session,全称叫:服务器session会话存储
02. 特点:
- 存在服务端,相对比较安全
- 存储的是浏览器和服务器之间产生的一些信息
- 默认session的存储在服务器的内存中,每当一个新客户端发来请求,服务器端都会新开辟出一块空间,供session会话存储
03. 工作流程:
- 第一次浏览器请求服务器的时候,服务器会开辟一块存储空间,供session会话存储使用
- 返回响应的时候,会自动返回一个cookie(有时为了安全, 会返回多个), cookie里面包含着,上一步会话存储‘容器’的编号(id)
- 以后请求的时候,浏览器会自动携带这个cookie,给服务器
- 服务器从cookie中拿到对应的session的id,去内存中匹配
- 服务器根据匹配的信息,决定下一步具体的业务逻辑
04. 使用cookie-session操作session
cookie-session将session identifier通过cookie存储在客户端,将session值存储在服务器端,比如数据库中
安装: npm install cookie-session
引入:cookieSession = require(“cookie-session”);
使用:app.use({
name: ‘mySession’, //设置cookie的名称,默认是session
keys: ["@#DS32", “% @ @ @$$!!”],//密钥, 加密和解密cookie值的秘钥列表
})
05. 代码示例:
const express = require('express');
const cookieSession = require('cookie-session');
const app = express();
app.listen(4000, () => {
console.log('server port 4000');
});
//使用中间件cookie-session操作session:
app.use(cookieSession({
name: 'cursession', //cookie名称
keys: ['123^%$abd', '*(&^%#876'] //密钥
// Cookie Options
//maxAge: 24 * 60 * 60 * 1000 // 24 hours
}));
//设计路由
//设置session :req.session.session名称 = 值
app.get('/setsession', (req, res) => {
req.session.UID = 21;
req.session.FENSHU = [89, 90];
res.send("<script>alert('session设置成功');location.href='/getsession';</script>");
});
//获取session
app.get('/getsession', (req, res) => {
console.log(req.session);
let { UID, FENSHU } = req.session;
res.send(req.session);
});
06. 应用:
app.get('/login', (req, res) => {
req.session.UID = 21;
req.session.FENSHU = [89, 90];
res.sendFile("./login.html")
});
function checkLogin(req, res, nex){
if(req.session.UID){
res.send("<script> location.href = '/welcome'; </script>")
}else {
res.send("<script> alert("请登录"); location.href = '/login'; </script>")
}
}
app.use(checkLogin);
app.get("/welcome", (req, res)=>{
res.send("欢迎登录");
})