【问题标题】:Node-Client-sessions vs express-session节点客户端会话与快速会话
【发布时间】:2015-12-28 19:04:23
【问题描述】:

我有这个作为后端 OAuth 服务器前端的 Node API。在 SAML OAuth 舞蹈结束时,我在浏览器 cookie 中设置了不记名令牌。

// need cookieParser middleware before we can do anything with cookies
app.use(express.cookieParser());

// set a cookie
app.use(function (req, res, next) {
  // check if client sent cookie
  var cookie = req.cookies.cookieName;
  if (cookie === undefined)
  {
    // no: set a new cookie
    var randomNumber=Math.random().toString();
    randomNumber=randomNumber.substring(2,randomNumber.length);
    res.cookie('cookieName',randomNumber, { maxAge: 900000, httpOnly: true });
    console.log('cookie created successfully');
  } 
  else
  {
    // yes, cookie was already present 
    console.log('cookie exists', cookie);
  } 
  next(); 
});


app.use(express.static(__dirname + '/public'));

现在我被介绍给一个花哨的 NPM,它做几乎相同的事情 https://github.com/mozilla/node-client-sessions

当我几乎倾向于使用这个 NPM 时,我遇到了 express-session。 https://github.com/expressjs/session - 这是用于服务器端会话。但这也设置了一个 cookie

    var express = require('express');
    var session = require("express-session");
    var app = express();


    app.use(session({
        resave: true,
        saveUninitialized: true,
        secret: 'ABC123',
        cookie: {
            maxAge: 60000
        }
    }));


    app.get("/test", function(req, res) {
        req.session.user_agent = req.headers['user-agent'];
        res.send("session set");
    });

如果我只需要在浏览器 cookie 中为后续 API 调用设置不记名令牌,我应该选择哪个选项?

【问题讨论】:

    标签: node.js session cookies express


    【解决方案1】:

    express-session 是我的目标。

    如果你看看用两种不同的方法完成同一件事需要什么,我认为答案很明确。

    如果您只想设置一个客户端 cookie,使服务器能够正确验证未来的请求,那么 express-session 非常棒。

    这是来自another question I answered 的示例集,它使用 MongoDB 作为后端来存储您的会话:

    'use strict';
    
    var express = require('express'),
      session = require('express-session'),
      cookieParser = require('cookie-parser'),
      mongoStore = require('connect-mongo')(session),
      mongoose = require('mongoose');
    
    mongoose.connect('mongodb://localhost/someDB');
    
    var app = express();
    
    var secret = 'shhh';
    
    app.use(session({
      resave: true,
      saveUninitialized: true,
      secret: secret,
      store: new mongoStore({
        mongooseConnection: mongoose.connection,
        collection: 'sessions' // default
      })
    }));
    
    // ROUTES, ETC.
    
    var port = 3000;
    
    app.listen(port, function() {
      console.log('listening on port ' + port + '.')
    });
    

    【讨论】:

    • 并且会话将在每个后续 API 调用中自动匹配?获取类似的帖子?
    • 是的,完全正确。在收到请求时,express-session 会查找connect.sid cookie,然后将会话附加到req.session。注意session 是如何在app.use(...) 内部定义的。 Session 充当中间件。
    猜你喜欢
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2019-07-16
    • 2013-11-07
    • 2018-07-21
    • 2013-08-30
    相关资源
    最近更新 更多