快递会话和Cookie会话有什么不同?
我是Express
新手。 由于Express 4.x
已经删除了捆绑的中间件。 任何我想使用的中间件应该是必需的。 当我通过github上的express-session和cookie-session阅读README时,我感觉很难理解它们之间的区别。
所以我试图写简单的代码来弄清楚。 我为每个中间件运行两次。
var express = require('express') , cookieParser = require('cookie-parser') , session = require('cookie-session') , express_sess = require('express-session') , app = express(); app.use(cookieParser()) app.use(session({ keys: ['abc'], name: 'user' })); //app.use(express_sess({ secret: 'abc', key: 'user'})); app.get('/', function (req, res, next) { res.end(JSON.stringify(req.cookies)); console.log(req.session) console.log(req.cookies) }); app.listen(3000);
对于cookie-session
,我总是在我的terminal中{}。
对于express-session
,我得到这样的事情。
req.session: { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true } } req.cookie: {user: 's:aJ97vKA5CCwxqdTj0AV1siRQ.fWusS5+qfCKICtwkfrzcZ/Gq8P0Qdx/kx8mTBhoOhGU'}
这真让我困惑。 那么如何用基本用法来解释结果呢? 他们之间有什么区别? 我应该什么时候使用它们?
基本上, express-session
更抽象,它支持不同的会话存储(如文件,数据库,caching和什么)。
而cookie-session
是一个简单/轻量级的基于cookie的(cookie是唯一支持的存储引擎:所有的会话信息都存储在客户端,以cookie的forms)会话实现。 这种会话可能是最着名的Rails实现 。
让我分享我发现的一个重要区别: 安全的cookie 。
我在处理SSL的nginx代理后面有一个节点进程。
我尝试了快速会话,但无法启用安全的cookie,请参阅此处的问题 。
然后,我尝试了几乎相同的代码,但与cookie会话 ,而是类似的东西
const expressSession = require('cookie-session') var expiryDate = new Date(Date.now() + 7 * 24 * 60 * 60 * 1000); // 7 days const session = expressSession({ secret: sessionSecret, resave: false, saveUninitialized: true, cookie: { secureProxy: true, httpOnly: true, domain: 'beintoo.net', expires: expiryDate } }) app.use(session)
我只是把require('express-session')
改成require('express-session')
require('cookie-session')
并添加了secureProxy: true,
一切都开箱即用。
还要注意,这两个软件包都由expressjs维护,所以可能在我的使用情况下,我很幸运地发现cookie会话符合我的需求。
这两者之间的基本区别涉及如何以及在哪里存储会话数据。 Cookie会话基本上用于会话数据存储在cookie中但位于客户端[浏览器]中的轻量级会话应用程序,而Express Session仅在客户端的cookie中存储仅仅会话标识符,而将会话数据完全存储在服务器上。 Cookie Session在后端没有使用数据库的应用程序中很有用。 但是,会话数据不能超过cookie的大小。 在使用数据库的情况下,它的作用就像是一个caching,用于停止频繁的数据库查找,而且这种查询很昂贵。