27

エクスプレスグループには答えがなかったので、この質問をSOに持ってきてください。

セッションmaxAge=900000を設定していますが、セッションCookieのexpiresプロパティが正しく設定されていることがわかります。ただし、後続のリクエストでは、タイムアウトは延長されません。拡張されることはなく、Cookieは最終的に期限切れになります。

セッションミドルウェアのドキュメントによると、Session#touch()は必要ないというのは、セッションミドルウェアが私に代わってやってくれるからです。私は実際にreq.session.touch()手動で呼び出してみましたが、それは何もしませんでした。また、maxAgeも設定しようとしましたが、req.session.cookie何もしませんでした:-(

アクティブなセッションを自動的に延長するための設定がどこかにありませんか?リクエストごとに手動でCookieを再作成する以外に、エンドユーザーのアクティビティ後にセッションタイムアウトを延長する他の方法はありますか?


編集:私はエクスプレスv3でこの問題を経験しました。100%確信はありませんが、エクスプレスチェンジログからのこのメモが原因である可能性があります。

4

2 に答える 2

33

ローリングセッションは、エクスプレスセッションに存在するようになりました。オプションでローリング属性をtrueに設定すると、現在の時刻に適用されるmaxAgeオフセットを設定することにより、有効期限の値が再計算されます。

https://github.com/expressjs/session/issues/3

https://github.com/expressjs/session/issues/33

https://github.com/expressjs/session(ローリングを検索)

たとえば、次のことに注意してくださいrolling

app.use(session({
  secret: 'a secret',
  cookie: {
    path: '/',
    httpOnly: true,
    secure: false,
    maxAge: 10 * 60 * 1000
  },
  rolling: true
}));
于 2014-07-17T03:25:27.203 に答える
19

他の誰かが同じ問題を抱えている場合の解決策は次のとおりです。

function (req, res, next) {

    if ('HEAD' == req.method || 'OPTIONS' == req.method) return next();

    // break session hash / force express to spit out a new cookie once per second at most
    req.session._garbage = Date();
    req.session.touch();

    next();

}
于 2013-01-25T20:30:14.213 に答える