【问题标题】:A few questions about express.cookieSession()关于 express.cookieSession() 的几个问题
【发布时间】:2013-01-30 16:17:59
【问题描述】:

在我的 node.js 服务器上(运行 expresssocket.io),当一个人连接时,我将他们添加到一个数组中,并将他们在数组中的位置保存到他们的会话中,这样每个连接都可以访问他们自己的信息像这样:

session.person_id = people.length;
session.save();
people.push(new Person());
//people[session.person_id] => Person

我在会话中唯一保存的是person_id。我一直在使用express.session() 来处理这个问题,在我开始向所有连接的人发送信息之前,它一直运行良好。当我遍历他们的连接并获取他们的会话时,有时(我无法弄清楚如何欺骗错误)session 存在但session.person_id 不存在。

无论如何,我希望通过改变我存储会话的方式,它可以帮助我找出我的问题。所以我有几个问题在任何地方都找不到答案。

  1. 来自 express.cookieSession() 的 cookie 存储在哪里?服务器端还是客户端?
  2. express.cookieSession() 是否允许在负载均衡器后面运行多个服务器?
  3. 用户在使用 express.cookieSession() 时是否可以操作会话数据?

【问题讨论】:

    标签: node.js session express session-cookies connect


    【解决方案1】:

    1 - express.cookieSession() 中的 cookie 存储在哪里?服务器端还是客户端?

    cookie 是根据服务器的回复发送的,浏览器会在每个请求中发送回该 cookie。

    2 - express.cookieSession() 是否允许在负载均衡器后面运行多个服务器?

    是的,如果您使用共享存储(如 RedisStore)

    3 - 用户在使用 express.cookieSession() 时是否可以操作会话数据?

    如果您使用签名的 cookie(当您在初始化会话时提供秘密时,默认的会话 cookie 的默认值)。

    var redis = require('redis').createClient();
    app.use(express.session({
      secret: "some random string",
      store: new RedisStore({client: redis})
      }));
    

    【讨论】:

    • express.sessionconnect.session 是完全相同的功能。 express.cookieSessionconnect.cookieSession 也是完全相同的功能。我想知道.cookieSession,你回答说要使用RedisStore,这只能通过使用.session来完成。因此,问题 2 和 3 似乎没有得到解答。你能澄清一下这两个吗?
    • cookieSession 的大小是有限的(4K 包括名称、到期时间和编码),但所有内容都存储在 cookie 中,因此这适用于 2. cookieSession 也会签署其 cookie (3)。但我不会使用 cookieSession,即使你加密了 cookie 的内容。
    • 嗯好的。所以cookieSession 可以和sessionRedisStore 一样使用,但后者更安全?
    • 对于数字 2,cookieSession 为每个请求将数据发送回服务器,为什么我们需要 Redis 以便在负载均衡器后面运行多个服务器?
    • #2 对我来说不太有意义。通过使用 express.cookieSession,一切都在 HTTP 标头中传入和传出服务器。服务器内存上没有存储任何内容,因此 RedisStore 没有用处,这仅在使用 express.session 时才有意义。
    猜你喜欢
    • 2011-05-12
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多