cookie, sesión, token
1. galleta
Una cookie es un pequeño fragmento de datos enviado por el servidor al cliente.
Las cookies se guardan según los nombres de dominio.
Características: al enviar una solicitud al servidor, la cookie se configurará automáticamente en el encabezado de la solicitud y se destruirá cuando se cierre el navegador.
// 设置 cookie
res.cookie('name', 'lisi', { maxAge: 1000 * 60 })
// 删除 cookie
res.clearCookie('name');
// 获取 cookie
npm i cookie-parser
const cookieParser = require("cookie-parser");
app.use(cookieParser());
req.cookies; // { name: 'lisi' }
2. sesión
La sesión es un dato almacenado en el servidor.
Proceso: después de iniciar sesión, el servidor guarda [{ sid: 'xxxx', nombre de usuario: 'lisi', user_id: '1' }], guarda el valor de sid configurando una cookie y envía una solicitud la próxima vez con una cookie. para determinar la identidad del usuario a través de sid
// 设置 session 中间件,生成 sessionId
npm i express-session connect-mongo
const session = require("express-session");
const MongoStore = require("connect-mongo");
app.use(session{
name: 'sid', // 设置cookie的name
secret: "yqcoder", // 参与加密的字符串
saveUninitializad: false, // 是否为每一个请求都设置cookie
resave: true, // 是否在每次请求后重新保存session
store: MongoStore({
mongoUrl: 'mongodb://127.0.0.1:27017/demo'
}),
cookie: {
httpOnly: true, // 开启后前端无法通过js操作
maxAge: 1000 * 60 // 过期时间
}
})
// 设置 session 信息
// req.query.username 获取url上的参数
req.session.username = 'yqcoder';
req.session.uid = '888';
// 读取 session 信息
req.session.username
// 销毁 session
req.session.destroy(() => {})
3. La diferencia entre cookie y sesión.
Ubicación de almacenamiento
cookie: navegador
sesión: servidor
seguridad
cookie: menos segura
sesión: relativamente buena
transmisión de red
cookie: demasiado contenido, lo que afecta la eficiencia de la transmisión
sesión: no afecta la eficiencia de la transmisión
límite de almacenamiento
galleta: no más de 4k
sesión: sin límite
4. cifrado unidireccional de contraseña md5
npm i md5
const md5 = require("md5");
md5(req.body.password);
5. ficha
El token es una cadena de cadenas cifradas generadas por el servidor y devueltas al cliente, y la información del usuario se almacena en el token.
Características: menos presión en el lado del servidor, relativamente más seguro y más escalable
npm i jsonwebtoken
const jwt = require("jsonwebtoken");
// 创建 token
// jwt.sign(用户数据, 加密字符串, 配置对象)
let token = jws.sign({
username: 'lisi'
}, 'yqcoder', {
expiresIn: 60 // 单位秒
})
// 解析 token
let token = req.get('token');
jwt.verify(token, 'yqcoder', (err, data) => {})