使用NodeJS进行无会话

时间:2013-08-12 21:16:49

标签: node.js session

我最近一直在做很多研究,在我看来,无状态服务器端可以带来性能和优势。可扩展性。

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

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

以便可以像每个HTTP请求一样发送令牌:

/set/:key/:val/:token

针对上述DB对象进行检查。这是什么意味着它是一个无会话的Web服务?

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


另一方面,最好是一个令牌,使用用户+密码的哈希值,还是在每次登录时指定另一个?

1 个答案:

答案 0 :(得分:3)

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

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