3

同じユーザー名とパスワードでの同時ログインを避けたいので、データベースにisloggedinオプションを設定しました。ユーザーがログインすると、「1」になります。そのため、そのユーザー名とパスワードを使用すると、電話をかけても再度ログインできなくなります。ログアウトすると「0」になり、ログインできるようになります。すべてが正常ですが、ネットが切断されたとき、またはユーザーがタブを閉じたときにiamに問題が発生します。isloggedinが「1」に設定されているためログインできません。ログアウトサーブレットを呼び出す必要があることを意味するものに設定することで回避する必要があります。これを実現するにはどうすればよいですか。

4

5 に答える 5

3

ユーザーがタブまたはブラウザを閉じたときにWebサーバーに確実に通知する手法はありません。次の手法は、ユーザーセッションがなくなった後にユーザーセッションを終了するのに役立つ場合があります。

  1. web.xmlでsession-timeoutを構成します。
  2. Cookieの経過時間(使用している場合)を-1に設定します。これにより、ブラウザを閉じたときにCookieが削除されます。
  3. セッションがアクティブであることを示すデータ(ハートビート)をサーバーに定期的に送信するJavaスクリプトがある場合があります。(ただし、これにより、ユーザーが長時間アイドル状態の場合でもセッションがアクティブになります)
于 2012-09-12T06:04:25.783 に答える
2

ユーザーの認証には、spring-securityを使用する必要があります。他の利点に加えて、許可される同時ログインの数も制御できます。http://static.springsource.org/spring-security/site/docs/3.0.x/referenceの「ConcurrentSessionControl」を参照してください。 /ns-config.html このように、ユーザーがセッションを無効にすると(ログアウトアクションを使用して)、またはブラウザページを閉じると(それもキャッチできます。onbeforeunloadイベントを参照)、セッションがアイドル状態であるためにタイムアウトする場合でもスプリングセキュリティフレームワークが多すぎると、すべてのケースが処理されます。このようにして、そのdb値を維持する必要がなくなります。

于 2012-09-12T06:02:50.517 に答える
1

DB フラグを使用する代わりに、List in server をグローバル パラメータとして使用し、これにユーザー名を追加することをお勧めします。したがって、ユーザーがログインしようとするたびに、パラメーターをリストに追加します。次に、ユーザーが再度セッションにログインしようとした場合は、リストでそのユーザー名が使用可能かどうかを確認し、使用可能であればそのセッションから削除します。

DB を使用している場合、DB の過負荷が発生する可能性があります。DBを空けておく

于 2012-09-12T06:57:12.357 に答える
0

ブラウザを閉じるときに javascrip 関数を呼び出すだけです。そこにロジックを追加して、セッションを変更したり、ユーザーがウィンドウを閉じるように制限したりできます。それはすべてあなた次第です。ここにあなたを導くための参照コードがあります

<html><head><title>Example</title>
<script language = "JavaScript">
function abc()
{
statements...
}
</script></head>
<body ONUNLOAD = "abc()">
</html>
于 2012-09-12T06:18:58.547 に答える
0

ブラウザーの切断/終了を検出するための一貫した、または 100% 信頼できる方法はありません。単に HTTP プロトコルで対処されていないだけです。前述したように、Javascript ( body onunload) を使用して少し進むことはできますが、それはすべてのシナリオをカバーするわけではなく、ブラウザー間で一貫性がありません。

ここでの簡単な答えは、ユーザーがサイトを離れた瞬間 (切断/移動/ウィンドウを閉じる) を検出できることに依存するようにシステムを設計するべきではないということです。

于 2012-09-12T06:55:07.383 に答える