1. ホーム
  2. node.js

express-sessionでsaveUninitializedとresaveを使用するタイミングについて

2023-10-31 08:54:07

質問

MEANスタックの初心者です。express-sessionを読みました。 githubドキュメント を読みましたが、私には不明なオプションがいくつかあります。それらのオプションは saveUninitializedresave .

で説明してください。 を使用する利点は何ですか? saveUninitializedresave といったオプションのブール値を変更した場合、どのような効果があるのでしょうか。

構文:-)

app.use(session({
  resave: false,
  saveUninitialized: true,
}))

どのように解決するのですか?

セッションがグローバルに(すべてのリクエストに対して)有効であると仮定してみましょう。

クライアントが HTTP リクエストを行い、そのリクエストがセッションクッキーを含んでいない場合、新しいセッションは express-session . 新しいセッションを作成すると、いくつかのことが行われます。

  • 一意のセッションIDを生成する
  • そのセッション ID をセッションクッキーに保存します (これにより、クライアントが行った後続のリクエストを識別することができます)。
  • として、空のセッションオブジェクトを作成します。 req.session
  • の値に応じて saveUninitialized の値に応じて、セッションオブジェクトはセッションストア (一般的には何らかのデータベース) に保存されます。

リクエストの有効期間中にセッションオブジェクトが修正されない場合、リクエストの終了時に saveUninitialized false の場合、(変更されていないのでまだ空の) セッションオブジェクトはセッションストアに保存されません。

この背後にある理由は、セッションストアに保存される多くの空のセッションオブジェクトを防ぐためです。保存する有用なものがないため、セッションはリクエストの終了時に忘れ去られます("forgot")。

いつこれを有効にするのでしょうか?たとえば、何度も訪れる訪問者を識別できるようにしたい場合です。そのような訪問者は、一意の ID を含むセッション クッキーを送信するので、認識することができます。

について resave これは "touch" コマンドをサポートしていないセッションストアに対して有効にしなければならないかもしれません。これは、特定のセッションがまだアクティブであることをセッション ストアに伝えるもので、アイドル (未使用) セッションをしばらくすると削除するストアもあるため、必要です。

セッションストアドライバがtouchコマンドを実装していない場合、セッションストアドライバで resave を有効にして、セッションがリクエスト中に変更されなかった場合でも、ストア内で更新されるようにします (これにより、アクティブであることが示されます)。

したがって、このオプションを有効にする必要があるかどうかは、使用しているセッション ストアに完全に依存します。