Connect/Express 中捆绑了两个与会话相关的中间件包。
它们之间有什么区别?我该如何选择?
我猜想 session 中间件和 cookieSession 中间件是相同的,只是多了一个存储机制。
Connect/Express 中捆绑了两个与会话相关的中间件包。
它们之间有什么区别?我该如何选择?
我猜想 session 中间件和 cookieSession 中间件是相同的,只是多了一个存储机制。
会话中间件 默认使用内存存储实现通用的会话功能。但是您也可以指定其他存储格式。
另一方面,cookieSession 中间件 实现了基于 cookie 的存储(即将整个会话序列化到 cookie 中,而不仅仅是会话键)。只有当会话数据相对较小时才应该使用它。
这两个中间件都使用客户端 cookie 来维护用户的上下文,即 Session。它们的区别在于:
下表比较了 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中间件更常用。