在Connect/Express中,“session”和“cookieSession”中间件有什么区别?

51

Connect/Express 中捆绑了两个与会话相关的中间件包。

它们之间有什么区别?我该如何选择?

我猜想 session 中间件和 cookieSession 中间件是相同的,只是多了一个存储机制。


你的两个链接指向同一个页面。 - user568109
2个回答

53

会话中间件 默认使用内存存储实现通用的会话功能。但是您也可以指定其他存储格式。

另一方面,cookieSession 中间件 实现了基于 cookie 的存储(即将整个会话序列化到 cookie 中,而不仅仅是会话键)。只有当会话数据相对较小时才应该使用它。


2
而且,据我所知,它(cookie-session)只应在会话数据不敏感时使用。假定用户可以查看会话的内容,但是中间件将检测到数据已被修改。 - Ryan Bales
如果会话数据需要保密,则应使用TLS,但在这种情况下,表单数据也应保密,因此无论如何都应该使用TLS。默认设置将防止其他网站读取这些cookie。很难想象一种情况,在这种情况下,您希望隐藏有关用户会话的信息,但在这种情况下,您可以在存储之前加密会话数据。 - Jess Austin

7

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接