express-session 的使用及负载均衡【session保存到数据库】
package.json 文件
{ "name": "express07", "version": "1.0.0", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "connect-mongo": "^3.2.0", "express": "^4.17.1", "express-session": "^1.17.1" }, "description": "" }
app.js 文件
// app.js /* session 的使用: 1、安装 : npm i express-session --save ; 2、引入 : const session = require("express-session"); 3、配置中间件: app.use( session({ secret: "this is session", // 服务器生成 session 的签名 resave: false, //强制保存 session 即使它并没有变化 saveUninitialized: true, //强制将为初始化的 session 存储 cookie: { maxAge: 1000 * 60 * 2, secure: false, // 为 true 时候表示只有 https 协议才能访问cookie }, rolling: true,//为 true 表示 超时前刷新,cookie 会重新计时; 为 false 表示在超时前刷新多少次,都是按照第一次刷新开始计时。 }) ); 4、使用: 设置: req.session.username ="张三" 获取: req.session.username */ // ------------------------------------------------------------------------------------------------------------------------- /* express-session 的常用方法: req.session.distroy((req, res) => {}); //销毁所有session req.session.username = "张三"; //设置 session username req.session.username; //获取session req.session.cookie.maxAge = 0; //重新设置session的过期时间 */ /* 销毁session: 1、设置session的过期时间为0 , 所有的session都将会销毁。 req.session.cookie.maxAge = 0; 2、销毁指定的session,设置它为空 req.session.username = ""; distroy() ,表示销毁所有的session req.session.destroy(); */ /* 多服务器负载均衡,将session保存到MongoDB数据库中:(其他数据库可以使用相对应的插件,如:connect-redis,connect-mysql,具体使用方法请查看相关文档) 1、安装: npm i connect-mongo --save 2、引入(放下 session下边): const MongoStore = require('connect-mongo')(session); 3、调用中间件: // Advanced usage app.use(session({ store: new MongoStore({ url: 'mongodb://user12345:foobar@localhost/test-app?authSource=admins&w=1', mongoOptions: advancedOptions // See below for details }) })); */ const express = require("express"); const session = require("express-session"); const MongoStore = require("connect-mongo")(session); const app = express(); app.use( session({ secret: "this is session", // 服务器生成 session 的签名 resave: false, //强制保存 session 即使它并没有变化 saveUninitialized: true, //强制将为初始化的 session 存储 cookie: { maxAge: 1000 * 60 * 10, secure: false, // 为 true 时候表示只有 https 协议才能访问cookie }, rolling: true, //为 true 表示 超时前刷新,cookie 会重新计时; 为 false 表示在超时前刷新多少次,都是按照第一次刷新开始计时。 store: new MongoStore({ url: "mongodb://127.0.0.1:27017/shop", touchAfter: 3600 * 24,//不管发生多少次请求,在3600*24毫秒内,都只更新一次session,除非改变了session。 }), // store: new MongoStore({ // url: "mongodb:127.0.0.1:27017/shop", // // mongoOptions: advancedOptions, // See below for details // }), }) ); app.get("/", (req, res) => { if (req.session.username || req.session.age) { res.send(req.session.username + ":已经登录----年龄:" + req.session.age); } else { res.send("用户未登录"); } }); app.get("/login", (req, res) => { req.session.username = "张三"; req.session.age = 18; res.send("执行登录"); }); app.get("/loginOut", (req, res) => { // 1、设置session的过期时间为0 , 所有的session都将会销毁。 // req.session.cookie.maxAge = 0; // 2、销毁指定的session,设置它为空 req.session.username = ""; // distroy() ,表示销毁所有的session // req.session.destroy(); res.send("退出登录"); }); app.listen(3009); console.log("run server http://127.0.0.1:3009");