49

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

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

4

2 回答 2

52

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

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

于 2013-04-01T14:14:14.757 回答
7

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

  • 存储在 cookie 中的内容,以及
  • 是否需要服务器端存储

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

于 2016-05-20T06:55:46.147 回答