Connect / Express中'session'和'cookieSession'中间件有什么区别?

时间:2013-04-01 14:00:50

标签: node.js session express connect middleware

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

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

2 个答案:

答案 0 :(得分:52)

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

另一方面,cookieSession middleware实现了 cookie支持的存储(也就是说,整个会话被序列化为cookie,而不仅仅是会话密钥。它应该真的仅在会话数据保持相对较小时使用。

答案 1 :(得分:5)

两个中间件都使用客户端cookie来维护用户的上下文,即 Session 。区别在于:

  • 存储在Cookie中的内容和
  • 是否需要服务器端商店

下表比较了cookieSession middlewaresession middleware wrt Sessions:

+----------------+-----------------------+----------------------+
|                |   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 middleware 更简单因为它不需要任何额外的服务器端存储,即服务器保持完全无状态。 session middleware需要服务器端存储。默认的基于内存的会话存储的一个明显局限是,当存在多个服务器实例时,它不起作用;在这种情况下将需要替代的共享存储(例如,数据库),这使得它相对复杂。一般而言,会话中间件更常用,因为它更灵活(用于存储敏感数据或更大的有效载荷等)。