首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >express-session和cookie-session有什么不同?

express-session和cookie-session有什么不同?
EN

Stack Overflow用户
提问于 2014-05-09 21:59:53
回答 8查看 39.5K关注 0票数 65

我是Express的新手。因为Express 4.x已经移除了捆绑的中间件。我想使用的任何中间件都应该是必需的。当我在github上阅读express-sessioncookie-session的自述文件时,我觉得很难理解其中的区别。

所以我试着写一些简单的代码来解决这个问题。我为每个中间件运行两次。

代码语言:javascript
复制
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,我的终端中总是出现{}。

对于express-session,我得到了这样的东西。

代码语言:javascript
复制
req.session: { cookie: { 
     path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: true 
   } 
}

req.cookie: {user: 's:aJ97vKA5CCwxqdTj0AV1siRQ.fWusS5+qfCKICtwkfrzcZ/Gq8P0Qdx/kx8mTBhoOhGU'}

这真的让我很困惑。那么如何解释基本用法的结果呢?它们之间的区别是什么?我应该什么时候使用它们?

EN

回答 8

Stack Overflow用户

发布于 2014-05-09 22:18:44

基本上,express-session更加抽象,它支持不同的会话存储(如文件、数据库、缓存等)。

cookie-session是一个基于cookie的简单/轻量级的会话实现(cookie是唯一支持的存储引擎:所有的会话信息都存储在客户端的cookie中)。这种类型的会话可能最出名的是它的Rails implementation

票数 48
EN

Stack Overflow用户

发布于 2017-11-13 16:56:26

这两者之间的基本区别与会话数据的存储方式和位置有关。Express基本上用于轻量级会话应用程序,其中会话数据存储在cookie中但在客户端浏览器中,而 Session仅在客户端的cookie中存储会话标识符,而将会话数据完全存储在服务器上。在后端不使用数据库的应用程序中,Cookie会话非常有用。但是,会话数据不能超过cookie大小。在使用数据库的情况下,它就像一个缓存,用来阻止频繁的数据库查找,这是非常昂贵的。

票数 23
EN

Stack Overflow用户

发布于 2018-04-18 09:02:06

express-session将会话标识符存储在cookie中,而实际的会话数据驻留在后端会话存储中,如connect-redis,其中as cookie-session允许您将会话数据存储在cookie中(客户端)。

来自cookie-session的文档:

使用cookies可以通过两种主要方式存储用户会话:在服务器上或在客户端上。此模块将客户端上的会话数据存储在cookie中,而像express-session这样的模块仅将客户端上的会话标识符存储在cookie中,并将会话数据存储在服务器上,通常存储在数据库中。

使用cookie-session的主要优点是,当您拥有集群node.js应用程序时,您不必依赖于在分支进程之间共享会话数据。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23566555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档