节点客户端会话与快速会话
Posted
技术标签:
【中文标题】节点客户端会话与快速会话【英文标题】: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 调用设置不记名令牌,我应该选择哪个选项?
【问题讨论】:
【参考方案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 充当中间件。以上是关于节点客户端会话与快速会话的主要内容,如果未能解决你的问题,请参考以下文章