3

セッションのログアウト時にユーザーをホームページにリダイレクトできます..これは非常に簡単でした. ただし、ユーザーがアプリにログインしてページを開いた場合、セッション タイムアウト時でも、すべての機能を実行できます (これは悪いことです)。

ページが更新されるか、サーバーに送信されるまで、リダイレクトは発生しません...ユーザーが現在ログインしていなくても実行できる更新機能がいくつかあります...私は多くの調査を行いましたが、このソリューションを修正できません。このスレッドも見つけましたが、適切な答えがないようです:

Spring Security 3.1 - セッションタイムアウトが発生したときにログインページに自動的にリダイレクトする

たとえば、ほとんどのバンキング サイトは、タイムアウト後にログアウトします。彼らは、ユーザーが戻ってきてリクエストを送信するまで待たずに、ユーザーがホームページにリダイレクトされます。

4

2 に答える 2

0

何もうまくいかないと仮定します。以下のアプローチを検討することをお勧めします。

アプローチ 1: ブラウザーで Cookie を作成し、ブラウザーencrypted timestampから最後にアクセスした/要求のタイムスタンプを含む Cookie をそこに入れます。要求ごとに、最初にこの Cookie 値を取得し、事前に定義されたセッション アウト時間と比較します。ユーザーをエラーページにリダイレクトするか、それ以外の場合はリクエストを処理します。ログアウト時に Cookie を削除します。

タイムスタンプの値を暗号化する理由: ユーザーがセッション タイムアウトに使用される Cookie について何らかの方法で知った場合、ブラウザーでこの値を変更し、この要求を送信し続けることができます。

アプローチ 2: ログインしているユーザーごとにデータベースにエントリを作成し、リクエストごとにこのデータベースのタイムスタンプを更新することで、これを実現することもできます。着信リクエストごとに、データベースからこのタイムスタンプを取得し、事前に定義されたタイムアウト値と比較して、それに応じて処理します。ログアウト時にエントリを削除します。

In both the approaches explicitly perform response.redirect("errorPageUrl");
于 2013-10-12T13:06:16.187 に答える
0

HTTP はステートレスです。何らかの状態を実現するために、サーバーは各ユーザーの最初のリクエストでセッション ID を与えることにより、各ユーザーのセッションを維持できます。ユーザーは、他のリクエストが同じセッション内で発生したことを識別するために、今後の各リクエストでそのセッション ID を再送信する必要があります。

セッションはサーバーによって維持されるため、セッションがタイムアウトしたことをクライアントに通知する方法はありません。

代わりに、セッションがタイムアウトしたときにユーザーが新しいリクエストを行うと、セッション ID が適切でなくなるため、ログイン ページにリダイレクトするなどの特定のアクションを実行できます。

于 2013-10-12T12:56:49.217 に答える