これはドキュメントのどこかに埋め込む必要があるように感じますが、見つかりません。
どのようにExpressJSのセッションを閉じたり、終了または強制終了したりしますか?
回答:
セッション処理はExpressに組み込まれなくなりました。この回答は標準のセッションモジュールを参照しています:https : //github.com/expressjs/session
セッションデータをクリアするには、次のコマンドを使用します。
req.session.destroy();
ドキュメントはこれに関して少し役に立たない。それは言う:
セッションを破棄し、req.sessionを削除すると、次のリクエストで再生成されます。
req.session.destroy(function(err) { // cannot access session here })
これは、現在のセッションが次のリクエストで再ロードされることを意味しません。これは、次のリクエストでセッションストアにクリーンな空のセッションが作成されることを意味します。(おそらくセッションIDは変更されていませんが、テストしていません。)
気にしないで req.session.destroy();
req.session.destroy();
アシッドゴーストと同じように使用されます。
質問では、どのタイプのセッションストアが使用されているかは明確にされていません。どちらの答えも正しいようです。
Cookieベースのセッションの場合:
http://expressjs.com/api.html#cookieSessionから
req.session = null // Deletes the cookie.
Redisなどのセッションの場合:
req.session.destroy // Deletes the session in the database.
http://expressjs.com/api.html#cookieSessionから
Cookieをクリアするには、応答する前にセッションをnullに割り当てます。
req.session = null
使用する、
delete req.session.yoursessionname;
を使用してもreq.session = null;
、実際にはセッションインスタンスは削除されません。最も適切な解決策はですがreq.session.destroy();
、これは本質的にのラッパーですdelete req.session;
。
https://github.com/expressjs/session/blob/master/session/session.js
Session.prototype.destroy = function(fn){
delete this.req.session;
this.req.sessionStore.destroy(this.id, fn);
return this;
};
セッションを破棄し、req.sessionプロパティの設定を解除します。完了すると、コールバックが呼び出されます。
↓ 安全な方法 ↓✅
req.session.destroy((err) => {
res.redirect('/') // will always fire after session is destroyed
})
↓ 安全でない方法 ↓❌
req.logout();
res.redirect('/') // can be called before logout is done