2

ログイン認証、セッション タイムアウト、および最大セッションを処理するために、Spring Security 3.1 を使用しています。

また、ログアウト時にのみ Cookie を削除しています。

<logout delete-cookies="JSESSIONID" logout-success-url='logout page' />

また、テストのために、現在のところ最大セッション数を 1 に設定しています。ブラウザで Web ページを開くと、jsession ID が Cookie に保存されますが、ブラウザを終了して再度開くと問題が発生します。現時点では、ブラウザーで Cookie が見つかりません。Cookie は削除されているため、ウェルカム ページ (ログイン後のページ) にリダイレクトされません。

しかし、再度ログインすると、印刷しているというエラー メッセージが表示されます。-セッション数が超過しました。

これは、セッションがサーバー側で存続している可能性がありますが、クライアント側の Cookie から削除されるため、ウェルカム ページが表示されず、ログイン ページにログインすることもできません。

セッションがタイムアウトするまで Cookie がブラウザに残るようにするには、他に何をする必要がありますか? セッションのタイムアウトを 10 日に設定しました

4

1 に答える 1

2

これは正常な動作です。JSESSIONID Cookie は、ブラウザー セッションの存続期間中のみ有効であるため、ブラウザーを閉じると失われます。これはあなたが変更できるものではありません。

ブラウザーのセッション認識と、サーバー上のセッションの存続時間の間には何の関係もありません。実際にログアウトしない限り、サーバーセッションは、タイムアウトしてサーバーによって削除されるまで (この場合は 10 日) 残ります。それが起こるまで、再度ログインしようとすると、許可されたセッション数を超えます。

10 日間ログインしたままにしたい場合は、標準のサーブレット コンテナー セッションではなく、remember-me Cookie の使用を検討することをお勧めします。

ユーザーが持つことができる同時セッションの数を制限するという明確な要件がない限り、問題が発生するだけなので、それを使用することは避けます。このための構成を実際に示していませんが、実際には 2 つのオプションしかありません。ユーザーが再度ログインすると、以前のセッションが期限切れとしてマークされるか、2 回目のログインを試みると、以前のセッションがタイムアウトするまでエラーが発生するか、ユーザーがログアウトして明示的にセッションを無効にします。この動作は、error-if-maximum-exceeded 名前空間属性によって制御されます。

于 2012-11-21T14:58:43.740 に答える