3

我最近做了很多研究,在我看来,无状态服务器端对性能和可扩展性都有好处。

我虽然试图弄清楚如何在 Node.JS 上实现无会话。在我看来,基本上我所要做的就是为登录用户分配一个令牌,所以我的数据库中会有这样的东西:

{ user:'foo@example.com', pass:'123456', token:'long_id_here' }

这样令牌就可以与每个 HTTP 请求一起发送,如下所示:

/set/:key/:val/:token

对照上述数据库对象进行检查。这就是无会话 Web 服务的真正含义吗?

如果这是正确的方法,那么我不了解令牌到期和其他安全问题。我想指出某种 NPM 包?


附带说明一下,最好使用令牌,使用用户+密码的哈希,还是在每次登录时分配一个不同的?

4

1 回答 1

3

无会话的原因是大多数默认会话实现都使用内存存储。这意味着会话信息存储在该实例的本地内存中。如今,随着流量的增加,大多数网站都在扩展。这意味着他们添加更多服务器并平衡服务器之间的负载。内存会话存储的问题是您的用户可以登录到服务器 1,但是如果他们的下一个请求被路由到服务器 2,他们还没有创建会话,并且似乎已注销。

您不一定需要无会话来使用节点或任何其他服务器端语言进行扩展。您只需要使用一个不在本地内存中且所有节点都可以访问的会话。如果您使用 Express 或 Connect 之类的东西,您可以轻松地使用connect-redis 之类的会话实现,这将使您拥有一个快速的会话存储,您的所有节点实例都可以访问它,因此无论哪个是打。

于 2013-08-12T21:58:10.293 回答