web-dev-qa-db-ja.com

Node + Express Session Expiration?

Expressのアプリがあり、ログインフォームがあります。セッションを1か月間継続する必要がありますか?maxAgeをミリ秒単位の月に設定しますか。

2台のコンピューターをオンのままにして、24時間ログインしましたが、戻ったときに両方ともログアウトしました。

これを修正する/私がやろうとしていることを達成するにはどうすればよいですか?ありがとう。

15
user775171

MaxAgeの代わりにexpires属性を使用できます。値としてDateオブジェクトを取ります。また、設定後にクライアントでセッションCookieの例を確認してください。サーバーによってセッションが終了した可能性があります(つまり、memcachedの再起動)。

コード例:

app.use(express.session(
  { secret: "secret", store: new MemoryStore(), expires: new Date(Date.now() + (30 * 86400 * 1000)) 
  }));

だが

  app.use(express.session(
    { secret: "secret", store: new MemoryStore(), maxAge: Date.now() + (30 * 86400 * 1000) 
    }));

私にとってもうまくいきます。

19
Vadim Baryshev

maxAgeは、セッションの継続時間をミリ秒単位で意味します。 expiresは、セッションがいつ期限切れになるかを意味します。つまり、日付オブジェクトです。

var hour = 3600000
req.session.cookie.expires = new Date(Date.now() + hour)

または

var hour = 3600000
req.session.cookie.maxAge = hour

ドキュメント

8
Dong
app.use(express.session({
    secret  : 'sdfsdSDFD5sf4rt4egrt4drgsdFSD4e5',
    store   : new storage({ client : conn, cleanup: false }),
    cookie  : { maxAge  : new Date(Date.now() + (60 * 1000 * 30)) }
}));
4
Hoovinator

@Vadim Baryshevによって受け入れられた回答は、少なくとも最新のエクスプレスセッションの実装に欠陥があります。アプリが起動したら、セッション実装を作成し、最大経過時間を設定します。有効期限を使用した回答については、お勧めしませんが、maxAgeを使用してください。

つまり、記述されているmaxAgeの例は、サーバーの起動後1か月ごとにセッションごとに期限切れになり、将来作成されるすべてのセッションはすぐに期限切れになります。サーバーが再起動されるまで、有効なセッションはありません。

日付オブジェクトを渡す代わりに、次のようにミリ秒数をmaxAgeプロパティに渡すだけです。

app.use(
  session({
    ...,
    cookie: {
      maxAge: 30 * 24 * 60 * 60 * 1000
    }
  })
);
2
Alex H.

ドキュメントでは、cookie.expiresを直接設定することは推奨されていません。代わりに、cookie.maxAgeを直接設定してください。

エクスプレスセッション-cookie.expires

2
Anderson Luiz