express req.session对象如何持久化?

尼古拉斯·福克

我对学习Node和Express还是很陌生,但我仍在尝试用express围绕代码流。假设我们在session.js中有如下代码:

app.post('/session', notLoggedIn, function(req, res) {
    User.findOne({
        username: req.body.username, 
        password: req.body.password
    }, function (err, user) {
        if (err) {
            return next(err);
        }
        if (user) {
            req.session.user = user;
            res.redirect('/users');
        } else {
            res.redirect('/session/new');
        }
    }); 
});

假设用户是必需的mongo模式。我发现奇怪的是session.user分配:

req.session.user = user;

由于req变量在重定向后将超出范围,但是显然我们这样做是为了保留用户数据,因此我需要弄清楚以下哪种情况描述了正在发生的情况。(A)被分配给req参数的参数(在调用回调时)被存储/仍在堆栈中的某个位置,(B)会话被存储/在堆栈中,并在它之前被分配给新的req对象传递给回调函数,或(C)与B相同,但在用户字段上(似乎不太可能,可能是我做的)。

jfriend00

这里有一个整体会话数据结构,用于存储所有会话信息(例如全局变量,但也可以存储在数据库中-至少在连接之间是持久的)。每个客户端的会话数据使用一个唯一的密钥索引到会话存储中,以获取该客户端的会话数据。

为给定浏览器客户端建立会话的一部分是创建唯一的客户端密钥(通常将其存储在cookie中),该密钥成为全局会话对象的索引。

在传入的HTTP请求上,支持会话的Express中间件会检查特定的客户端cookie,并且如果该特定cookie在http请求上找到并在全局会话对象/数据库中找到,则它将该会话的存储信息添加到请求对象中供http请求处理程序以后使用。

因此,这是一个典型的序列:

  1. 传入的HTTP请求。
  2. 中间件检查会话cookie。
  3. 如果会话cookie不存在,则创建一个,然后在该过程中创建一个唯一的ID,以标识此http客户端。
  4. 在持久会话存储中,为此新客户端初始化会话。
  5. 如果存在会话cookie,则在会话存储中查找该客户端的会话数据,并将该数据添加到请求对象。
  6. 会话中间件处理结束
  7. 稍后,在此http请求的Express处理中,它到达匹配的请求处理程序。来自会话存储的该特定http客户端的会话数据已经附加到请求对象,并且可供请求处理程序使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Busboy访问Express 4 req.body对象

来自分类Dev

无法访问Express / NodeJS中的req.session变量

来自分类Dev

Node.js Express req.session未定义

来自分类Dev

Express:从/models/index.js访问req.session

来自分类Dev

在Express.js中未定义req.session

来自分类Dev

Express cookieSession不会填充req.session

来自分类Dev

Express Passport.js:req.user与VERSUS req.session.passport.user

来自分类Dev

Node Express-req.cookies和req.session.cookie之间的区别

来自分类Dev

如何在NodeJS / Express应用程序中显示整个req对象?

来自分类Dev

express-session 无法持久化会话

来自分类Dev

如何使用函数、类和 req.pipe 模块化 Express 应用程序?

来自分类Dev

connect-redis和express-session结果在req.session中未定义

来自分类Dev

Express.js req.session在路由中未定义

来自分类Dev

为什么在节点express的req.session中有一个cookie?

来自分类Dev

Passport.js 和 Express Session - req.user 未定义导致 .isAuthenticted() 返回 false

来自分类Dev

在Node.js Express中随时随地访问当前的req对象

来自分类Dev

req.body中的对象属性键与客户端(Express)中的键不同

来自分类Dev

在express.js路由中向req对象插入多个结果

来自分类Dev

Express Manipulating req对象传递给下一个中间件

来自分类Dev

Express中的req.header与req.headers

来自分类Dev

如何使用express.js的req.subdomains获取本地子域?

来自分类Dev

节点/ Express,如何修改静态文件但仍然可以访问req.params?

来自分类Dev

如何防止多余的东西在Express.js中的req.body中发送

来自分类Dev

节点/ Express,如何修改静态文件但仍然可以访问req.params?

来自分类Dev

如何在 express.js 中传递到 req.flash() 的链接

来自分类Dev

Express:req.flash()需要会话

来自分类Dev

来自Express'req.query的奇怪输出

来自分类Dev

Express-req.ip返回127.0.0.1

来自分类Dev

Express req.query.time返回NaN

Related 相关文章

  1. 1

    如何使用Busboy访问Express 4 req.body对象

  2. 2

    无法访问Express / NodeJS中的req.session变量

  3. 3

    Node.js Express req.session未定义

  4. 4

    Express:从/models/index.js访问req.session

  5. 5

    在Express.js中未定义req.session

  6. 6

    Express cookieSession不会填充req.session

  7. 7

    Express Passport.js:req.user与VERSUS req.session.passport.user

  8. 8

    Node Express-req.cookies和req.session.cookie之间的区别

  9. 9

    如何在NodeJS / Express应用程序中显示整个req对象?

  10. 10

    express-session 无法持久化会话

  11. 11

    如何使用函数、类和 req.pipe 模块化 Express 应用程序?

  12. 12

    connect-redis和express-session结果在req.session中未定义

  13. 13

    Express.js req.session在路由中未定义

  14. 14

    为什么在节点express的req.session中有一个cookie?

  15. 15

    Passport.js 和 Express Session - req.user 未定义导致 .isAuthenticted() 返回 false

  16. 16

    在Node.js Express中随时随地访问当前的req对象

  17. 17

    req.body中的对象属性键与客户端(Express)中的键不同

  18. 18

    在express.js路由中向req对象插入多个结果

  19. 19

    Express Manipulating req对象传递给下一个中间件

  20. 20

    Express中的req.header与req.headers

  21. 21

    如何使用express.js的req.subdomains获取本地子域?

  22. 22

    节点/ Express,如何修改静态文件但仍然可以访问req.params?

  23. 23

    如何防止多余的东西在Express.js中的req.body中发送

  24. 24

    节点/ Express,如何修改静态文件但仍然可以访问req.params?

  25. 25

    如何在 express.js 中传递到 req.flash() 的链接

  26. 26

    Express:req.flash()需要会话

  27. 27

    来自Express'req.query的奇怪输出

  28. 28

    Express-req.ip返回127.0.0.1

  29. 29

    Express req.query.time返回NaN

热门标签

归档