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");

 

posted @ 2020-12-15 15:55  半遮  阅读(249)  评论(0编辑  收藏  举报