4

在我的 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() 时是否可以操作会话数据?
4

1 回答 1

3

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})
  }));
于 2013-02-14T20:00:29.130 回答