1.session是什么?
session 指的是会话,但是后端人员常说的session,全程叫:服务器session会话存储
2.特点
(1)存在于服务端
(2)存储的是浏览器和服务器之间沟通产生的一些信息
3.存储
默认session的存储在服务器的内存中,每当一个新的客户端发来请求,服务器都会新开辟初一块空间,供session使用。
4.工作流程
-- 第一次浏览器请求服务器的时候,服务器会开辟初一块内存空间,供session会话使用。
-- 返回响应的时候,会自动返回一个cookie,(有时候,会返回多个,为了安全)cookie里包含着,上一步会话存储“容器”的编号(id)
-- 以后请求的时候,回自动携带这个cookie,给服务器
-- 服务器从该cookie中拿到对应的session的id,去服务器中匹配
-- 服务器会根据匹配信息,决定下一步的业务逻辑。
5.备注
1. 一般来说。cookie一定会配合session使用
2. 服务端一般会做session的持久化,防止由于服务器重启,造成的session丢失。
6.举个🌰:
在server.js中
6.1.引入express-session模块 (用于在exporess 中操作session)
let session = require(‘express-session’)
6.2.引入connect-mongo 模块,用于session持久化
let mongoStore = require(‘connect-mongo’)(session)
6.3.配置全局对象:
app.use(session({
name:'userid', //设置cookie的name,默认值是:connect.sid
secret:'daiwang', //参与🔐加密的字符串(又称签名)
saveUninitialized:false, //是否在储存内容之前创建会话
resave:true, //是否在每次请求时,强制重新保存session,即使 他们没有变化
store:new MongoStore({
url:'mongodb://localhost:27017/cookies_container',
touchAfter:1800 ,//修改频率 (例:在24小时之内只更新一次)
}),
cookie:{
httpOnly:true,//开启后前端无法通过JS操作cookie
maxAge:1000 * 30 ,//设置cookie的过期时间
},
}))
6.4.给session值:(在业务路由)
request.session._id = findResult._id
6.5.取session值:(在UIrouter)
const {_id} = request.session
补充内容:
给密码加密:
1.sha1版:
(1)安装
yarn add sha1
(2)引入
let sha1 = require('sha1')
(3)使用
注册时往数据库创建数据:password:sha1(password)
登录时: password:sha1(password)
2.md5版
(1)安装
yarn add md5
(2)引入
let md5 = require('md5')
(3)使用
注册时往数据库创建数据:password:md5(password)
登录时: password:md5(password)