ExpressJSでセッションを終了する方法


88

これはドキュメントのどこかに埋め込む必要があるように感じますが、見つかりません。

どのようにExpressJSのセッションを閉じたり、終了または強制終了したりしますか?

回答:


121

Express 4.x更新された回答

セッション処理はExpressに組み込まれなくなりました。この回答は標準のセッションモジュールを参照しています:https : //github.com/expressjs/session

セッションデータをクリアするには、次のコマンドを使用します。

req.session.destroy();

ドキュメントはこれに関して少し役に立たない。それは言う:

セッションを破棄し、req.sessionを削除すると、次のリクエストで再生成されます。 req.session.destroy(function(err) { // cannot access session here })

これは、現在のセッションが次のリクエストで再ロードされることを意味しませ。これは、次のリクエストでセッションストアにクリーンな空のセッションが作成されることを意味します。(おそらくセッションIDは変更されていませんが、テストしていません。)


即時のリクエストではなく、セッションからセッションを破棄する方法はありますか?たとえば、私がすべてのデバイス機能からログアウトするように実装する場合、それが必要になります
Muhammad Umer

1
@MuhammadUmer私が知る限り、任意のセッションを破棄するための組み込みのメカニズムはありません。これは、セッションに関連付けられたキーをストレージから削除するか、独自のセッションラッパーを作成することで、簡単に自分で実装できます。
ブラッド

92

気にしないで req.session.destroy();


8
これはExpress 3では機能しません。「req.session.destroy()」を呼び出そうとしています
acidghost

6
ExpressJS 3.00で問題なく動作しています。req.session.destroy();アシッドゴーストと同じように使用されます。
ヘキサシアニド

1
req.session.destroy()の使用もExpress 2.5で機能します
TulioPa 2013

1
これはどこに文書化されていますか?私はそれを見つけようとしています。
ハギー、2014

24

質問では、どのタイプのセッションストアが使用されているかは明確にされていません。どちらの答えも正しいようです。

Cookieベースのセッションの場合:

http://expressjs.com/api.html#cookieSessionから

req.session = null // Deletes the cookie.

Redisなどのセッションの場合:

req.session.destroy // Deletes the session in the database.

1
req.session.destroyは基本的に「delete req.session」のラッパーです。ここのソースコードを参照してください:github.com/expressjs/session/blob/master/session/session.js
tfmontague


6

使用する、

delete req.session.yoursessionname;

私は本当にこれについての文書を見たいです。
2014年

5
@Nithinの反対投票すべてに対して。github(github.com/expressjs/session/blob/master/session/session.js)に記載されているsession.destroy()関数メソッドは、「delete this.req.session」を使用します。これは、@ Nithinの答えではありませんが、 「削除」の使用も正しい解決策です(他の回答には含まれていません)。
tfmontague 2014

これは適切な解決策ですか?メモリリークはありません。悪質なことが発生することはありませんか。
Rajath

5

を使用しても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;
};

4

Session.destroy(callback)

セッションを破棄し、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

0
req.session.destroy(); 

上記はうまくいかなかったので、これを行いました。

req.session.cookie.expires = new Date().getTime();

Cookieの有効期限を現在の時刻に設定すると、セッションはそれ自体で期限切れになります。


-5

いくつかの場所で述べたように、req.session.destroy()関数を正しく動作させることもできません。

これは私の回避策です..トリックを行うようですが、それでもreq.flashを使用できます

req.session = {};

req.session = nullを削除または設定した場合、それではreq.flashを使用できないようです


1
セッションハッシュは変更されないため、これはセキュリティの問題です
Tosh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.