これはドキュメントのどこかに埋める必要があるように感じますが、見つかりません。
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();
この質問では、使用されているセッションストアのタイプが明確になりませんでした。どちらの答えも正しいようです。
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プロパティの設定を解除します。完了すると、コールバックが呼び出されます。
↓安全な方法↓✅</p>
req.session.destroy((err) => {
res.redirect('/') // will always fire after session is destroyed
})
↓安全でない方法↓❌</p>
req.logout();
res.redirect('/') // can be called before logout is done
https://github.com/expressjs/session#sessiondestroycallback
req.session.destory();
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;
};
https://github.com/expressjs/cookie-session#destroying-a-session
req.session = null;
req.session.destroy();
上記は私にはうまくいかなかったので、私はこれをしました。
req.session.cookie.expires = new Date().getTime();
Cookieの有効期限を現在の時刻に設定すると、セッションが自動的に期限切れになります。
req.session.id
またはを使用してセッションのIDを取得し、次のようにメソッドreq.sessionID
に渡すことができます。req.sessionStore.destroy
const sessionID = req.session.id;
req.sessionStore.destroy(sessionID, (err) => {
// callback function. If an error occurs, it will be accessible here.
if(err){
return console.error(err)
}
console.log("The session has been destroyed!")
})
いくつかの場所で述べたように、req.session.destroy()関数を正しく機能させることもできません。
これは私の回避策です..トリックを実行しているようですが、それでもreq.flashを使用できます
req.session = {};
req.session=nullを削除または設定した場合。、その場合はreq.flashを使用できないようです