2016-11-02 6 views
9

私はMEANスタックで初心者です。私はエクスプレスセッションgithub docを読んでいますが、クリアできないオプションがあります。そのオプションはsaveUninitializedresaveです。saveUninitializedを使用して、エクスプレスセッションで再保存する場合

誰もが何saveUninitializedresaveを使用してのadvatangesであり、私たちはそのオプションにブール値を変更した場合、何が影響する例を挙げて説明していただけます。

構文: -

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

答えて

23

のは、セッションが(すべての要求のための)グローバルに有効にされていると仮定しよう。

クライアントがHTTP要求を行い、その要求にセッションクッキーが含まれていない場合、express-sessionによって新しいセッションが作成されます。新しいセッションを作成すると、いくつかのことを行います。

  • は、一意のセッションIDをセッションクッキーにセッションID(クライアントによって行われたので、その後の要求を識別することができます)
  • が空のセッションを作成することを
  • ストアを生成しますオブジェクトは、saveUninitializedの値に応じreq.session
  • として、リクエストの終了時に、セッションオブジェクトは、
(一般的にデータベースのいくつかの並べ替えである)セッションストアに格納されます

要求の存続期間中にセッションオブジェクトが変更されていない場合、要求の最後にsaveUninitializedである場合、の場合、セッションオブジェクトは(まだ変更されていないため空ではありません)セッションストアに保存されません。

これは、セッションストアに多数の空のセッションオブジェクトが格納されるのを防ぐためです。保存に役立つものは何もないので、セッションはリクエストの最後に「忘れられた」ものです。

いつ有効にしますか?定期的な訪問者を特定できるようにする場合など。そのような訪問者は、一意のIDを含むセッションCookieを送信するため、このような訪問者を認識することができます。

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

セッションストアドライバでtouchコマンドが実装されていない場合は、resaveを有効にして、要求中にセッションが変更されていなくてもストアで更新されるようにします(アクティブにします)。

このオプションを有効にするかどうかは、使用しているセッションストアによって異なります。

+0

私はいくつか疑問があります、私たちは話すことができます、それは私をたくさん助けますか? –

+0

@SurajJainは私にロバートのメールを撃つ。Klep DOTの名前:D – robertklep

+0

さて、これでいいだろう。 –

6

saveUninitializedを偽に設定すると、セッションが変更されない限り、セッションクッキーはブラウザに設定されません。その行動は暗示されているかもしれませんが、初めて私がdocumentationを読んでいたときは私には分かりませんでした。

関連する問題