node.js-Connect / Express中的“会话”和“ cookieSession”中间件有什么区别?

Connect / Express捆绑了两个与会话相关的中间件。有什么区别? 我该如何选择?

我假设会话中间件与cookieSession中间件相同,但是具有额外的存储机制。

gfaceless asked 2020-02-10T03:32:00Z
2个解决方案
52 votes

默认情况下,会话中间件通过内存存储实现通用会话功能。 但是,它允许您指定其他存储格式。

另一方面,cookieSession中间件实现了cookie支持的存储(也就是说,整个会话被序列化为cookie,而不仅仅是会话密钥。它实际上仅应在会话数据将保持相对较小的情况下使用。

jmar777 answered 2020-02-10T03:32:28Z
6 votes

两种中间件都使用客户端cookie来维护用户的上下文(即会话)。 区别在于:

  • Cookie中存储了什么,以及
  • 是否需要服务器端存储

下表比较了cookieSession中间件和wrt会话的中间件:

+----------------+-----------------------+----------------------+
|                |   Client-side store   |   Server-side store  |
|                |        (cookie)       |  (in-memory, db ..)  |
+----------------+-----------------------+----------------------+
| Middleware     | Used?  |    Content   | Used? |    Content   |
+----------------+--------+--------------+-------+--------------+
| session        |   Yes  |  Session ID  |  Yes  | Session data |
+----------------+--------+--------------+-------+--------------+
| cookie-session |   Yes  | Session data |   No  |      N/A     |
+----------------+--------+--------------+-------+--------------+

cookieSession中间件更为简单,因为它不需要任何其他服务器端存储,即服务器保持完全无状态。 会话中间件需要服务器端存储。 默认的基于内存的会话存储的一个明显限制是,当有多个服务器实例时,它不起作用。 在这种情况下,将需要备用共享存储(例如,数据库),这使其相对复杂。 通常,会话中间件由于更灵活(用于存储敏感数据或更大的有效负载等)而更加常用。

Brij answered 2020-02-10T03:33:06Z
translate from https://stackoverflow.com:/questions/15744897/what-is-the-difference-between-session-and-cookiesession-middleware-in-conne