同時に1人のみにログインできるアカウントの場合、次の方法で達成できます。
1.ユーザーがログインしたときにユーザーをArrayListに追加します
2。もう一度ログインするときは、ArrayListにユーザーがいるかどうかを確認します。ユーザーが既にArrayListに存在する場合、ログインがブロックされます。
3.ユーザーが終了すると、ユーザーは3つの状況に分かれているArrayListから削除する必要があります
logoutログアウトボタンを使用して正常に終了します
closeブラウザをクリックするか、ボタンを閉じるか、Alt+F4を使用して終了すると、JavaScriptを使用してページ閉じるイベントをキャプチャできます。
Javaメソッドを実行して、ArrayListでユーザーを削除します
crashionクライアントシステムでのクラッシュや突然のクラッシュなどの異常なログアウトでは、セッションに対応するユーザーを使用して、セッションがたまにアクティブでない場合はセッションを削除して、ユーザーが通常ログインする前にしばらく待つ必要があります。
LoginActionで定義されています:
//サーバー側にログインしたすべてのアカウントを保存するために使用されますpublic static list logonAccounts。
login()login method:
//セッションの非アクティブ時間を30分間request.getSession()。SetMaxinActiveInterval(60*30); if(logonAccounts == null){logonAccounts = new arrayList();} //アレイリストにユーザーがいるかどうかを確認します(int i = 0; i <logonacunts.size(); i+i+i++++++excuntsize(); (account)logonAccounts.get(i); if(account.getaccountid()。equals(custaccount.getaccountid())){return "denied";}} //ユーザーがアカウントオブジェクトにログインした場合、cessionidを追加して後でconsessed対応するユーザーアカウントを削除する必要があります。 logonAccounts.add(アカウント); 「ログイン」を返します。logoutログアウトボタンを使用して正常に終了します
logout()exitメソッド:
if(logonAccounts == null){logonAccounts = new arrayList();} // arrayList for(int i = 0; i <logonAccounts.size(); i ++){account custaCcount =(account)logonacounts.get(i); if(account.getaccountid()。closeブラウザをクリックするか、ボタンを閉じるか、Alt+F4を使用して終了します。
ウィンドウがバックグラウンドにポップアップし、ポップアップウィンドウのアレイリストでユーザーを削除します
function window.onbeforunload(){//閉じるボタンを介して終了するか、alt+f4 //を使用するかどうか、onbeforeunloadイベントが更新のためにトリガーされた場合、次のifステートメントはif(event.clientx> document.body.body.body.clientwidth &&を実行しませんevent.clienty <0 || event.altkey){window.open( 'accountunbound.jsp'、 ''、 'height = 0、width = 0、top = 10000、left = 10000');}}}accountunbound.jsp:ポップアップウィンドウの配列でユーザーを削除します
<%アカウントアカウント=(account)request.getSession()。getAttribute( "account"); if(account!= null){if(loginaction.logonaccounts == null){loginaction.logonAccounts = new arrayList();} // arraylistのユーザーを削除 - 次のコードはint in int in int in ea in int in ea in in ea in int in ea in in ea in in int in ea in inですlogOnAccounts.size(); account escoccount =(account)logonaccounts.get(i); if(account.getaccountid()上記のコードを実行できるようにするために、3秒後にこのポップアップウィンドウを閉じます(Accountunbound.jspにもあります)
<script> setimeout( "closewindow();"、3000); function closewindow(){window.close();} </script>loginaction Loginactionを実装し、httpsessionListenerを実装し、セッション作成およびセッションが作成されたメソッドを実装します。 sessiondestroyedのarrayListでユーザーを削除します(ユーザーが30分以上非アクティブである場合、この方法は実行されます)
public void sessiondestroyed(httpssessionevent event){// sessionidをアクティブにするときにセッションを取得し、対応するlogonAccounts string sessionid = event.getsession()。getId(); for(int i = 0; i <logonAccounts.size(); i ++){account escedaccount =(account)logonAccounts.get(i); if(account.getSessionId()。equals(custaccount.getSessionId())){logonaccounts.remove(account);}}}}}注記:
上記の場合、ポップアップウィンドウはファイアウォールまたはセキュリティソフトウェアによって簡単にブロックされるため、ポップアップウィンドウをポップアップできないため、短期ログインをログインできません。この場合、ポップアップウィンドウの代わりにAJAXを使用できます。バックグラウンドでユーザーを削除するコードは実行されますが、ファイアウォールによって制限されません。
<script> // <![cdata [var http_request = false; function makerequest(url){http_request = false; if(window.xmlhttprequest){// mozilla、safari、... http_request = new xmlhtpretpest(); {http_request.overridemimeType( 'text/xml');}} else if(window.activexobject){// ietry {http_request = new ActiveXObject( "msxml2.xmlhttp");} {try {HTP_REREQUEST = NEW ActiveXObject( "microsoft.xmlhttp");} catch(e){}}} if(!http_request){alert( 'giving up :( xmlhttp instance'); return false;} http_request.on readystateKeyange = gettpen; true); http_request.send(null);} function alertcontents(){if(http_request.readystate == 4){if(http_request.status == 200){window.close();} else {alert( 'on}; {makerequest( 'coundunbound.jsp');} //]]> </script>インターネット上の上記のAJAXコードについては、多くの詳細な説明があります。 onbeunload()ブラウザの閉じるイベントにそれを追加すると、バックグラウンドで非常にうまく機能するため、ポップアップが無効になることがある問題について心配する必要はありません。
このコードを使用した後、上記のcourcountunbound.jspのJSコードは、ポップアップウィンドウウィンドウを閉じます。close();もう必要ありません。
上記は、エディターが紹介するQQログイン関数のJava Web実装です。 1つのアカウントは、同時に1人のみをログインできます。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は、すべての人に時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!