Untuk akun yang hanya dapat masuk satu orang pada saat yang sama, itu dapat dicapai dengan metode berikut:
1. Tambahkan pengguna ke daftar array saat pengguna masuk
2. Saat masuk lagi, periksa apakah ada pengguna di ArrayList. Jika pengguna sudah ada di ArrayList, itu akan diblokir dari masuk.
3. Saat pengguna keluar, pengguna perlu dihapus dari daftar array, yang dibagi menjadi tiga situasi
① Gunakan tombol logout untuk keluar secara normal
② Klik tombol tutup browser atau gunakan Alt+F4 untuk keluar, dan Anda dapat menggunakan JavaScript untuk menangkap acara tutup halaman.
Jalankan metode Java untuk menghapus pengguna di ArrayList
③ Logout yang tidak biasa, seperti crash atau crash mendadak pada sistem klien, Anda dapat menggunakan pengguna yang sesuai dengan sesi untuk menghapus sesi jika sesi tidak aktif sesekali, sehingga pengguna perlu menunggu sebentar sebelum masuk secara normal.
Didefinisikan dalam Loginaksi:
// Digunakan untuk menyimpan semua akun yang masuk di sisi server Daftar Statis Publik LogonAccounts;
Login () Metode login:
// Atur waktu ketidakaktifan sesi menjadi 30 menit permintaan.getSession (). SetmaxinactiveInterval (60*30); if (logonaccounts == null) {logonaccounts = arraylist baru ();} // periksa apakah ada pengguna di arraylist untuk (int i = 0; i <logonaccounts. (Akun) logonaccounts.get (i); if (account.getAccountId (). Equals (existaccount.getAccountId ())) {return "ditolak";}} // Ketika pengguna masuk, tambahkan sessionid ke objek akun // kemudian ③ Anda perlu menghapus akun pengguna yang sesuai. mengembalikan "login";① Gunakan tombol logout untuk keluar secara normal
Logout () Metode keluar:
if (LOGONAccounts == null) {LogonAccounts = new arrayList ();} // hapus pengguna di arraylist ⑴ untuk (int i = 0; i <logonaccounts.size (); i ++) {akun eksistaCcount = (akun) logonaccounts.get (i); if (account.getAccountId (). Equals (ExistacCount.getAccountId ())) {LOGONACCOUNTS.REMOVE (ACCOUND);}}② Klik tombol tutup browser atau gunakan Alt+F4 untuk keluar:
Jendela muncul di latar belakang, menghapus pengguna di daftar array di jendela pop-up
function window.onbeforeunload () {// Apakah akan keluar melalui tombol tutup atau menggunakan alt+f4 // jika acara OnBeforeunload dipicu untuk refresh, pernyataan IF berikut tidak mengeksekusi IF (event.clientx> document.body.clientwidth && event.clienty <0 || event.altkey) {window.open ('accountunbound.jsp', '', 'height = 0, width = 0, top = 10000, kiri = 10000');}}Accountunbound.jsp: Hapus pengguna di ArrayList di jendela pop-up
<%Akun akun = (akun) request.getSession (). GetAttribute ("akun"); if (akun! = Null) {if (loginaction.logonaccounts == null) {loginaction.logonaccounts = new arraylist ();} // hapus pengguna dalam arraylist. i ++) {Account ExistAccount = (Account) LogonAccounts.get (i); if (Account.getAccountId (). Equals (ExistAccount.getAccountId ())) {LogonAccounts.Remove (akun);}}%>%>Untuk memastikan bahwa kode di atas dapat dieksekusi, tutup jendela pop-up ini setelah 3 detik (juga terletak di Accountunbound.jsp)
<script> setTimeout ("closeWindow ();", 3000); function closeWindow () {window.close ();} </script>③ Buat LoginAction mengimplementasikan httpsessionListener, dan mengimplementasikan metode sesi yang dibread dan disterstroyed. Hapus Pengguna di ArrayList di sessionDestroyed (jika pengguna tidak aktif selama lebih dari 30 menit, metode ini akan dieksekusi)
public void sessionDestroyed (acara httpsessionEvent) {// Dapatkan sessionId saat tidak aktif, dan hapus pengguna dalam string LogonAccounts yang sesuai SesionId = event.getSession (). getId (); untuk (int i = 0; i <logonAccounts.size (); i ++) {akun adacount = (akun) logonaccounts.get (i); if (Account.GetSessionId (). Equals (ExistAccount.GetSessionId ())) {LogonAccounts.Remove (akun);}}}Catatan:
Untuk hal di atas, karena jendela pop-up mudah diblokir oleh firewall atau perangkat lunak keamanan, jendela pop-up tidak dapat muncul, dan oleh karena itu login jangka pendek tidak dapat dicatat. Dalam hal ini, AJAX dapat digunakan sebagai pengganti jendela pop-up. Kode yang menghapus pengguna di latar belakang dieksekusi, tetapi tidak akan dibatasi oleh firewall:
<script> // <! [cdata [var http_request = false; function MakeRequest (url) {http_request = false; if (window.xmlhttprequest) {// mozilla, safari, ... http_request = new xmlHtprequest (); {http_request.overridemimetype ('text/xml');}} lain if (window.activexObject) {// ietry {http_request = new ActivexObject ("msxml2.xmlHtp");} catch (e) {try {msxml2.xmlHtp ");} catch (e) {try {msxml2.xmlHtp");} catch (e) {try {msxml2.xmlHtp "); ActivexObject ("Microsoft.xmlhttp");} catch (e) {}}} if (! Http_request) {waspada ('menyerah :( tidak dapat membuat instance xmlhtpange,' get 'http_pene. true); http_request.send (null);} function alertContents () {if (http_request.readystate == 4) {if (http_request.status == 200) {window.close ();} else {waspada ('ada masalah dengan permintaan. {MakeRequest ('Accountunbound.jsp');} //]]> </script> Ada banyak penjelasan terperinci untuk kode AJAX di atas di internet. Menambahkannya ke acara tutup Browser OnBeforeunload () akan bekerja dengan sangat baik di latar belakang, jadi tidak perlu khawatir tentang masalah bahwa pop-up terkadang tidak valid.
Setelah menggunakan kode ini, kode JS di Accountunbound.jsp di di atas ② menutup jendela pop-up window.close (); tidak lagi dibutuhkan.
Di atas adalah implementasi web Java dari fungsi login QQ yang diperkenalkan oleh editor kepada Anda. Satu akun hanya dapat masuk satu orang pada saat yang sama. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!