node.js - Node 客户端 session 与快速 session

标签 node.js session cookies express

我有这个前端后端 OAuth 服务器的 Node API。在 SAML OAuth 舞蹈结束时,我在浏览器 cookie 中设置 Bearer Token。

// 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 - 这是用于服务器端 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 调用设置不记名 token ,我应该选择哪个选项?

最佳答案

express-session 是我的首选。

如果您查看使用两种不同方法完成同一件事所花费的时间,我认为答案很明确。

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

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

'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 + '.')
});

关于node.js - Node 客户端 session 与快速 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32875501/

相关文章:

node.js - Connect.sid 始终未定义并且 req.session ID 不断重置

java - 我可以用 Tomcat 8 注册多个 HttpSessionListener 覆盖吗?

javascript - php jwt 登录存储

php - 我可以将用户信息放入和从 session 中检索到 Laravel 自定义用户提供程序吗?

node.js - Visual Studio Code 无法识别 ES6 语法

json - 使用 ID 作为索引将数组转换为 JSON (MongoDB/Express)

node.js - 主要 Node.js 文件存在哪些命名约定?

javascript - 如何检索 cookie 的值?

php - 如何阻止用户规避付款?

javascript - 替换树结构中的根