web-dev-qa-db-ja.com

Connect / Expressの「セッション」ミドルウェアと「cookieSession」ミドルウェアの違いは何ですか?

Connect/Expressにバンドルされている2つのセッション関連ミドルウェアがあります。違いはなんですか?どうやって選ぶの?

session ミドルウェアは cookieSession ミドルウェアと同じですが、追加のストアメカニズムがあると想定しています。

49
gfaceless

セッションミドルウェア は、デフォルトでin-memoryストレージを使用して一般的なセッション機能を実装します。ただし、他のストレージ形式を指定できます。

cookieSessionミドルウェア は、cookie-backedストレージを実装します(つまり、セッション全体が単なるセッションキーではなくCookieです。実際には、セッションデータが比較的小さいままの場合にのみ使用してください。

52
jmar777

両方のミドルウェアは、クライアント側のCookieを使用して、ユーザーのコンテキスト、つまりSessionを維持します。違いは次のとおりです。

  • Cookieに保存されるもの、および
  • サーバー側ストアが必要かどうか

以下の表は、セッション cookieSessionミドルウェアセッションミドルウェア を比較しています。

+----------------+-----------------------+----------------------+
|                |   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ミドルウェアsimplerであり、サーバー側のストアを追加する必要がないため、サーバーは完全にステートレスのままです。 セッションミドルウェア にはサーバー側ストアが必要です。デフォルトのインメモリベースのセッションストアの明らかな制限は、サーバーの複数のインスタンスがある場合は機能しないことです。そのような場合は、代替の共有ストレージ(データベースなど)が必要になるため、比較的複雑になります。ただし、一般的には、セッションミドルウェアの方が(機密データや大きなペイロードなどを格納するために)より柔軟性があるため、より一般的に使用されます。

6
Brij