express-session 的使用及負載均衡【session儲存到資料庫】
阿新 • • 發佈:2020-12-15
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");