Connect / Express捆绑了两个与会话相关的中间件。 有什么不同?我该如何选择?
我假设session中间件与cookieSession中间件相同,但有额外的存储机制。
答案 0 :(得分:52)
session middleware默认情况下使用内存存储实现通用会话功能。但是,它允许您指定其他存储格式。
另一方面,cookieSession middleware实现了 cookie支持的存储(也就是说,整个会话被序列化为cookie,而不仅仅是会话密钥。它应该真的仅在会话数据保持相对较小时使用。
答案 1 :(得分:5)
两个中间件都使用客户端cookie来维护用户的上下文,即 Session 。区别在于:
下表比较了cookieSession middleware和session 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需要服务器端存储。默认的基于内存的会话存储的一个明显局限是,当存在多个服务器实例时,它不起作用;在这种情况下将需要替代的共享存储(例如,数据库),这使得它相对复杂。一般而言,会话中间件更常用,因为它更灵活(用于存储敏感数据或更大的有效载荷等)。