一、 Session 简单介绍
session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 session 保存在服务器上。
Cookie 数据存放在客户的浏览器上,Session 数据放在服务器上。Session 相比 Cookie 要 更安全一些。由于Session 保存到服务器上,所以当访问量增多的时候,会比较占用服务器 的性能。单个 cookie 保存的数据大小不能超过4K,很多浏览器都限制一个站点最多保存 20 个 cookie。Session 没有这方面的限制。Session 是基于 Cookie进行工作的。
二、 Session 的工作流程
当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session 对象,生成一 个类似于 key,value 的键值对, 然后将key(cookie)返回到浏览器(客户)端,浏览器下次 再访问时,携带 key(cookie),找到对应的 session(value)。
三、 express-session 的使用
https://www.npmjs.com/package/express-session
1、安装
express-session cnpm install express-session --save
2、引入
express-session var session = require("express-session");
- 设置官方文档提供的中间件
app.use(session({
secret: 'keyboard cat',
resave: true,
saveUninitialized: true
}))
- 使用
// 设置值
req.session.username = "张三";
// 获取值
req.session.username
四、 express-session 的常用参数
app.use(session({
secret: '12345',
name: 'name',
cookie: {maxAge: 60000},
resave: false,
saveUninitialized: true
}));
五、 express-session 的常用方法
req.session.destroy(function(err) { /*销毁 session*/ })
req.session.username='张三'; //设置 session
req.session.username //获取 session
req.session.cookie.maxAge=0; //设置 session 的过期时间 (它会把所有的session都销毁)
req.session.username=''; //销毁指定session
六、 负载均衡配置 Session,把 Session 保存到数据库里面
1.需要安装 express-session 和 connect-mongo 模块
2.引入模块
var session = require("express-session");
const MongoStore = require('connect-mongo')(session);
3.配置中间件
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
rolling:true,
cookie:{ maxAge:100000 },
store: new MongoStore({
url: 'mongodb://127.0.0.1:27017/student',
touchAfter: 24 * 3600 // time period in seconds
})
}))