私はMEANスタックの初心者です。 express-session github doc を読みましたが、私には不明なオプションがいくつかあります。これらのオプションは、saveUninitialized
およびresave
です。
誰でも例で説明できますか?saveUninitialized
とresave
を使用する利点は何ですか?これらのオプションのブール値を変更します。
構文:-
app.use(session({
resave: false,
saveUninitialized: true,
}))
セッションがグローバルに(すべてのリクエストに対して)有効になっていると仮定しましょう。
クライアントがHTTPリクエストを作成し、そのリクエストにセッションCookieが含まれていない場合、express-session
によって新しいセッションが作成されます。新しいセッションを作成すると、いくつかのことが行われます。
req.session
として空のセッションオブジェクトを作成しますsaveUninitialized
の値に応じて、リクエストの最後に、セッションオブジェクトはセッションストア(通常は何らかのデータベース)に格納されますリクエストの存続期間中にセッションオブジェクトが変更されない場合、リクエストの最後でsaveUninitialized
がfalseの場合、(変更されていないため、まだ空の)セッションオブジェクトセッションストアには保存されません。
この背後にある理由は、これにより、セッションストアに多くの空のセッションオブジェクトが格納されるのを防ぐことができるからです。保存するのに役立つものは何もないため、セッションはリクエストの最後で「忘れられて」しまいます。
これをいつ有効にしますか?たとえば、定期的な訪問者を識別できるようにする場合。このような訪問者は、一意のIDを含むセッションCookieを送信するため、認識できます。
resave
について:これは、「タッチ」コマンドをサポートしないセッションストアに対して有効にする必要がある場合があります。これが行うことは、特定のセッションがまだアクティブであることをセッションストアに伝えることです。これは、一部のストアがしばらくするとアイドル(未使用)セッションを削除するために必要です。
セッションストアドライバーがtouchコマンドを実装しない場合は、resave
を有効にして、リクエスト中にセッションが変更されなかった場合でも、ストアで更新されるようにします(それによりアクティブにマークします)。 。
したがって、このオプションを有効にする必要があるかどうかは、使用しているセッションストアに完全に依存します。
注意すべきことの1つは、saveUninitialized
をfalseに設定すると、セッションが変更されました。その振る舞いは暗示されるかもしれませんが、最初に documentation を読んでいたとき、私にははっきりしませんでした。