95

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

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

4

10 に答える 10

140

Express4.x更新された回答

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

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

req.session.destroy();

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

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

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

于 2015-04-14T05:23:56.837 に答える
96

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

于 2011-04-06T21:40:21.470 に答える
26

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

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

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

req.session = null // Deletes the cookie.

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

req.session.destroy // Deletes the session in the database.
于 2014-01-26T06:32:33.733 に答える
9

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

Cookieをクリアするには、応答する前にセッションをnullに割り当てるだけです。

req.session = null
于 2013-05-15T08:25:59.653 に答える
8

使用する、

delete req.session.yoursessionname;
于 2013-03-06T11:42:24.607 に答える
8

Session.destroy(コールバック)

セッションを破棄し、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
于 2020-02-24T19:39:23.687 に答える
6

サーバー側のセッションを終了するには

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;
};

Cookieセッションを終了するには

https://github.com/expressjs/cookie-session#destroying-a-session

req.session = null;
于 2014-12-31T09:30:19.477 に答える
0
req.session.destroy(); 

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

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

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

于 2018-12-06T16:04:20.687 に答える
0

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.sessionStore.destroy

于 2021-12-20T22:39:50.353 に答える
-7

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

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

req.session = {};

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

于 2015-06-28T23:41:33.930 に答える