5

でもで

app.use(express.session({
    secret: conf.secret,
    maxAge : new Date(Date.now() + 360000),
    expires: new Date(Date.now() + 360000),//I've tried both separately
    store : new MongoStore(conf.db),


}));

mongodbでのセッションは永遠に続きます(私がテストした限り)

MongoDBのセッションストアは、セッションが終了した後もそこにとどまることになっていますか?
セッション宣言にmaxAgeまたはexpiresがある場合でも、MongoDBでは、すべてのセッションは次のようになります。

{ "_id" : "FU8k3kEzquG/hoSD308H5XHa", "session" : "{\"cookie
\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,
\"path\":\"/\"}}" }

また、私の_idのほとんどには、数字/文字以外の文字、つまり/、+などがあります。それらはそのようになっているはずですか?

ブラウザを再度開くたびに、新しいセッションが作成されますが、古いセッションはMongoDBに残っています。これに修正があるのか​​、それとも意図的なものなのかを知りたいだけです。

ありがとう、ブランドン

4

2 に答える 2

5

MongoDB のセッション ストアは、セッションが終了した後もそこにとどまるはずですか?

これは、ブラウザーの Cookie の有効期限が切れても、セッション情報が MongoDB などの永続的なバックエンド データ ストアに保存されている場合に想定される動作です。2 つのデータ ストア (バックエンドとブラウザー ベースの Cookie) の有効期限は異なる場合があります。

セッションを永続化するために connect-mongodbを使用していると仮定すると、デフォルトreapIntervalでは 60 秒ごとに期限切れのセッションの削除がトリガーされます。

セッションの有効期限が「null」に設定されているため、これらのセッションは期限切れになりません。セッションの有効期限はCookie の値と同じである必要expiresがあります。設定されていない場合は、問題を追跡するために少しデバッグする必要があります。

これらは、設定を試みる前に保存された古いセッションである可能性がありmaxAgeます。新しいセッションがexpires期待どおりに設定されているかどうかを確認します。その場合、期限切れでない古いセッションの一部を手動で削除する必要がある場合があります。

また、私の _id のほとんどには、数字/文字以外の文字、つまり /、+ などがあります。

はい、Express セッション ID は 24 文字の英数字の文字列です。

于 2012-08-16T05:10:08.713 に答える
1

説明ありがとう、ステニー!入れる必要があることがわかりました

cookie: { maxAge: new Date(Date.now() + 360000)}

それ以外の

maxAge : new Date(Date.now() + 360000)
//or
expires: new Date(Date.now() + 360000)

古いセッション コレクションをデータベースにドロップしたため (テストしているだけなので、データは重要ではありません)、テスト中に新しいセッションのみを表示できるようになりました。それらは本来あるべき姿になり、すべての clear_interval をクリアします (connect-mongo の reapInterval と同等)。

于 2012-08-16T21:15:48.923 に答える