สำหรับบัญชีที่สามารถเข้าสู่ระบบเดียวในเวลาเดียวกันเท่านั้นมันสามารถทำได้โดยวิธีการต่อไปนี้:
1. เพิ่มผู้ใช้ใน ArrayList เมื่อผู้ใช้เข้าสู่ระบบ
2. เมื่อเข้าสู่ระบบอีกครั้งตรวจสอบว่ามีผู้ใช้ใน ArrayList หรือไม่ หากผู้ใช้มีอยู่แล้วใน ArrayList มันจะถูกบล็อกจากการเข้าสู่ระบบ
3. เมื่อผู้ใช้ออกผู้ใช้จะต้องถูกลบออกจาก ArrayList ซึ่งแบ่งออกเป็นสามสถานการณ์
①ใช้ปุ่มออกจากระบบเพื่อออกตามปกติ
②คลิกปุ่มปิดเบราว์เซอร์หรือใช้ Alt+F4 เพื่อออกและคุณสามารถใช้ JavaScript เพื่อจับภาพเหตุการณ์ปิดหน้า
ดำเนินการวิธี Java เพื่อลบผู้ใช้ใน ArrayList
③การออกจากระบบที่ผิดปกติเช่นความผิดพลาดหรือความผิดพลาดอย่างฉับพลันในระบบไคลเอนต์คุณสามารถใช้ผู้ใช้ที่สอดคล้องกับเซสชันเพื่อลบเซสชันหากเซสชันไม่ทำงานทุกครั้งในขณะที่ผู้ใช้ต้องรอสักครู่ก่อนที่จะเข้าสู่ระบบตามปกติ
กำหนดในการเข้าสู่ระบบ:
// ใช้เพื่อจัดเก็บบัญชีทั้งหมดที่ลงชื่อเข้าใช้ในรายการเซิร์ฟเวอร์สาธารณะรายการคงที่ logonAccounts;
เข้าสู่ระบบ () วิธีการเข้าสู่ระบบ:
// ตั้งค่าเวลาการไม่ใช้งานของเซสชันเป็น 30 นาทีคำขอ. getSession (). setMaxinactiveInterval (60*30); ถ้า (logonAccounts == null) {logOnAccounts = new ArrayList ();} // ตรวจสอบว่ามีผู้ใช้ใน arrayList สำหรับ (int i = 0; (บัญชี) logonaccounts.get (i); if (account.getAccountId (). เท่ากับ (arilecact.getAccountId ())) {return "denied";}} // เมื่อผู้ใช้เข้าสู่ระบบ, เพิ่ม sessionId ลงในวัตถุบัญชี // ในภายหลัง③คุณต้องลบบัญชีผู้ใช้ที่เกี่ยวข้อง กลับ "เข้าสู่ระบบ";①ใช้ปุ่มออกจากระบบเพื่อออกตามปกติ
logout () วิธีการออก:
if (logOnAccounts == null) {logOnAccounts = new ArrayList ();} // ลบผู้ใช้ใน arrayList ⑴สำหรับ (int i = 0; i <logOnAccounts.Size (); i ++) {บัญชี ariapleActive = (บัญชี) logOnAccounts.get (i); if (account.getAccountId (). Equals (มีอยู่จริง.②คลิกปุ่มปิดเบราว์เซอร์หรือใช้ Alt+F4 เพื่อออก:
หน้าต่างปรากฏขึ้นในพื้นหลังลบผู้ใช้ใน ArrayList ในหน้าต่างป๊อปอัพ
function window.onbeforeunload () {// ไม่ว่าจะออกจากปุ่มปิดหรือใช้ alt+f4 // ถ้าเหตุการณ์ onbeforeunload ถูกเรียกใช้สำหรับการรีเฟรช, คำสั่งต่อไปนี้หากไม่ดำเนินการหาก (event.clientx> document.body.clientwidth && Event.clienty <0 || event.altkey) {window.open ('accountunbound.jsp', '', 'ความสูง = 0, width = 0, top = 10,000, ซ้าย = 10,000');}}mactionunbound.jsp: ลบผู้ใช้ใน ArrayList ในหน้าต่างป๊อปอัพ
<%บัญชี = (บัญชี) request.getSession (). getAttribute ("บัญชี"); ถ้า (บัญชี! = null) {ถ้า (loginAction.logonAccounts == null) {loginAction.logonAccounts = arrayList (); i ++) {บัญชีมีอยู่ Account = (บัญชี) logOnAccounts.get (i); if (account.getAccountId (). equals (arilecount.getAccountId ())) {logoNaccounts.remove (บัญชี);}}}%>%>เพื่อให้แน่ใจว่าสามารถดำเนินการรหัสข้างต้นได้ให้ปิดหน้าต่างป๊อปอัพนี้หลังจาก 3 วินาที (อยู่ใน accountunbound.jsp)
<script> settimeout ("closewindow ();", 3000); ฟังก์ชั่น closewindow () {window.close ();} </script>③ทำการบันทึกการเข้าสู่ระบบโดยใช้ httpsessionListener และใช้วิธีการ SessionCreated และ SessionDestroyed ลบผู้ใช้ใน ArrayList ใน SessionDestroyed (หากผู้ใช้ไม่ได้ใช้งานนานกว่า 30 นาทีวิธีนี้จะถูกดำเนินการ)
โมฆะสาธารณะ sessionDestroyed (เหตุการณ์ httpsessionEvent) {// รับ sessionId เมื่อไม่ใช้งานและลบผู้ใช้ในสตริง logonAccounts ที่สอดคล้องกัน SessionId = event.getSession (). getId (); สำหรับ (int i = 0; i <logonAccounts.size (); i ++) {บัญชีมีอยู่ = (บัญชี) logonaccounts.get (i); if (account.getSessionId (). เท่ากับ (มีอยู่จริงบันทึก:
สำหรับข้างต้นเนื่องจากหน้าต่างป๊อปอัพถูกบล็อกอย่างง่ายดายโดยซอฟต์แวร์ไฟร์วอลล์หรือความปลอดภัยหน้าต่างป๊อปอัพจึงไม่สามารถเกิดขึ้นได้ดังนั้นจึงไม่สามารถเข้าสู่ระบบระยะสั้นล็อกอินได้ในกรณีนี้ AJAX สามารถใช้แทนหน้าต่างป๊อปอัพได้ รหัสที่ลบผู้ใช้ในพื้นหลังจะถูกดำเนินการ แต่จะไม่ถูก จำกัด โดยไฟร์วอลล์:
<script> // <! [cdata [var http_request = false; function makeRequest (url) {http_request = false; ถ้า (window.xmlhttprequest) {// mozilla, safari, ... http_request = new xmlhttttttttttt {http_request.overridemimeType ('text/xml');}} else ถ้า (window.activexobject) {// ietry {http_request = new ActiveXoBject ("msxml2.xmlhttp"); activexObject ("microsoft.xmlhttp");} catch (e) {}}} ถ้า (! http_request) {Alert ('ยอมแพ้ :( ไม่สามารถสร้างอินสแตนซ์ xmlhttp); returt; true); http_request.send (null);} ฟังก์ชัน AlertContents () {ถ้า (http_request.readystate == 4) {ถ้า (http_request.status == 200) {window.close ()} {makeRequest ('accountunbound.jsp');} //]]> </script> มีคำอธิบายโดยละเอียดมากมายสำหรับรหัส AJAX ข้างต้นบนอินเทอร์เน็ต การเพิ่มลงในเหตุการณ์ปิดเบราว์เซอร์ onbeforeunload () จะทำงานได้ดีในพื้นหลังดังนั้นจึงไม่จำเป็นต้องกังวลเกี่ยวกับปัญหาที่บางครั้งป๊อปอัปจะไม่ถูกต้อง
หลังจากใช้รหัสนี้รหัส js ใน accountunbound.jsp ในด้านบน②ปิดหน้าต่างป๊อปอัพหน้าต่าง close (); ไม่จำเป็นอีกต่อไป
ข้างต้นคือการใช้งาน Java Web ของฟังก์ชั่นการเข้าสู่ระบบ QQ ที่ตัวแก้ไขแนะนำให้คุณ บัญชีหนึ่งสามารถเข้าสู่ระบบเดียวในเวลาเดียวกัน ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!