【问题标题】:Is node.js express-session stateless or stateful?node.js express-session 是无状态的还是有状态的?
【发布时间】:2014-08-18 08:00:10
【问题描述】:

我实际上正在使用 express-session,我有一个问题: 是 node.js,或者更具体地说是 express-session 无状态还是有状态?

其实,当我们需要与node一起使用session时,我们使用req.session.foo,意思是我们使用request来获取session

那么,服务器上是否存储了任何内容(有状态)?在这种情况下,为什么我们不能像 PHP 那样使用“全局变量”来访问值?

另外一种情况,说明我们有一个无状态的服务器,sessionID的值是和token key对应的吗?

你能帮我多理解一下这个中间件吗?

感谢提前

【问题讨论】:

    标签: javascript node.js session express


    【解决方案1】:

    服务器上是否存储了任何东西

    是的,这就是会话的工作方式

    为什么我们不能像在 php 中那样使用“全局变量”来访问值

    因为基于节点的 HTTP 服务器中的全局变量对于 服务器 是全局的,而不是 请求。您的会话会相互覆盖。

    【讨论】:

    • 所以我可以找到存储会话的“文件”?
    • 仅当您将 express-session 配置为使用不同的会话存储时。默认是memory.js,我不希望使用文件。
    • 默认情况下,我如何确定发送的会话是好的并且是现有的?
    • 如果您正在编写自己的会话存储,那么您遵循规范。如果你不是,那么你不必担心它,因为会话库有责任处理它。
    • 那么,使用 express-session 没问题?
    【解决方案2】:

    会话是关于在服务器中存储有关特定客户端的信息,因此您不能再谈论严格的“无状态服务器”。


    PHP 中的“全局变量”也是每个请求的。

    请注意,PHP 代码每次请求调用一次,而 Node 代码继续运行并服务多个请求,因此您需要显式获取特定请求的会话。

    【讨论】:

      【解决方案3】:

      我假设您正在寻找的是一种无需使用服务器连接的存储机制(Redis、MySQL 等)即可存储有关当前用户的某些状态的方法。

      这正是cookie-session 所做的。它以 cookie 的形式在客户端存储状态,但也存储 HMAC 签名以验证客户端没有更改信息。这允许客户端保持它自己的状态,同时也确保客户端提供给你的信息是可信的。

      您将需要一个用于签署会话 cookie 的密钥(或多个密钥),而不是会话存储提供程序。

      另外,我建议查看源代码,因为有些文档有点过时了。

      【讨论】:

        猜你喜欢
        • 2012-06-19
        • 2023-04-09
        • 1970-01-01
        • 2017-07-16
        • 1970-01-01
        • 2014-05-07
        • 2021-11-07
        • 2018-09-27
        • 2021-12-08
        相关资源
        最近更新 更多