Express引入Session机制

如何在express中引入session呢?经过调研,发现使用mongodb+session方案,具体参考如下:

  • session
  • connect-mongo
    但是跨域(cors)会引起session丢失,这个后面再讲。
    步骤如下:
  1. 在app.js头部引入引用

     var session = require('express-session');
     var MongoStore = require('connect-mongo')(session);
    
  2. 因为想要做成解耦的,所以把session的配置抽出去,放在一个文件中,因为有动态的东西,所以做成函数了。

     var settings = require('./utils/settings');
     app.use(session(settings.session(MongoStore)));
    
     > ./utils/settings.js
     module.exports = {
         mysql: {
            host: '127.0.0.1',
            port: 3306,
            user: '****',
            password: '****',
            database: '****',
            charset: 'utf8'
        },
        session: function(MongoStore){
            return {
                resave:false,//添加这行,重新保存:强制会话保存即使是未修改的;
                saveUninitialized: true,//添加这行 ,强制“未初始化的”会话保存到存储
                key: "session~",//cookie name
                cookie: {
                    path: '/',
                    httpOnly: true,
                    secure: false, // TODO: Set to true when HTTPS was used.
                    maxAge: 1000 * 60 * 60 * 24 * 30
    
                 },
                 secret: "****",
                 store: new MongoStore({
                     db: "****"
                 })
             }
         }
     };
    
  3. 用户登录,session验证,自定义一个中间件,然后引入。

     module.exports = function (req, res, next) {
         if (req.url == '/login/login') {
             next();
         } else {
             if (req.session.isLogined) {
                 next();
             } else {
                 res.json("Hasn't login!");
             }
         }
     };
     app.use(require("./utils/sessionchk"));
    

扩展知识:
express-session使用理解
跨域资源共享 CORS 详解

你可能感兴趣的:(Express引入Session机制)