بالنسبة لحساب لا يمكنه تسجيل الدخول إلى شخص واحد إلا في نفس الوقت ، يمكن تحقيقه بالطريقة التالية:
1. أضف المستخدم إلى قائمة ArrayList عندما يقوم المستخدم بتسجيل الدخول
2. عند تسجيل الدخول مرة أخرى ، تحقق مما إذا كان هناك أي مستخدم في ArrayList. إذا كان المستخدم موجودًا بالفعل في ArrayList ، فسيتم حظره من تسجيل الدخول.
3. عندما يخرج المستخدم ، يجب حذف المستخدم من قائمة ArrayList ، والتي تنقسم إلى ثلاث حالات
① استخدم زر الخروج للخروج بشكل طبيعي
② انقر فوق الزر "إغلاق المتصفح" أو استخدم Alt+F4 للخروج ، ويمكنك استخدام JavaScript لالتقاط حدث إغلاق الصفحة.
تنفيذ طريقة Java لحذف المستخدمين في ArrayList
③ تسجيل الدخول غير المعتاد ، مثل التصادم أو التصادم المفاجئ على نظام العميل ، يمكنك استخدام المستخدم المقابل للجلسة لحذف الجلسة إذا كانت الجلسة غير نشطة كل مرة ، بحيث يحتاج المستخدم إلى الانتظار لفترة من الوقت قبل تسجيل الدخول بشكل طبيعي.
محددة في تسجيل الدخول:
// المستخدمة لتخزين جميع الحسابات التي تم تسجيل الدخول عليها على جانب القائمة الثابتة في جانب الخادم ؛
طريقة تسجيل الدخول () طريقة تسجيل الدخول:
// قم بتعيين وقت عدم نشاط الجلسة إلى 30 دقيقة request.getSession (). setMaxInateGinterval (60*30) ؛ if (logonAccounts == null) {logonAccounts = new ArrayList () ؛} // تحقق من وجود أي مستخدم في arraylist لـ (int i = 0 ؛ i <logoniccounts.size () if (account.getAccountId (). equals (profiScount.getAccountId ())) {return "kenired" ؛}} // عندما يقوم المستخدم بتسجيل الدخول ، أضف SessionID إلى كائن حساب // لاحقًا ③ تحتاج إلى حذف ercated user. إرجاع "تسجيل الدخول" ؛① استخدم زر الخروج للخروج بشكل طبيعي
طريقة الخروج () الخروج:
if (logonAccounts == null) {logonAccounts = new ArrayList () ؛} // حذف المستخدمين في ArrayList ⑴ لـ (int i = 0 ؛ i <logonAccounts.size () ؛ i ++) {حساب الوجود = (حساب) logonAccounts.get (i) ؛ if (account.getAccountId (). equals (posticcount.getAccountId ())) {logonAccounts.Remove (account) ؛}}② انقر فوق الزر "إغلاق المتصفح" أو استخدم Alt+F4 للخروج:
تنبثق نافذة في الخلفية ، تحذف المستخدم في قائمة ArrayList في النافذة المنبثقة
الوظيفة window.onbeforeunload () {// ما إذا كان يجب الخروج من خلال الزر الإغلاق أو استخدام alt+f4 // إذا تم تشغيل حدث onbeforeunload للتحديث ، فإن العبارة التالية لا يتم تنفيذها if (event.clientx> document.body.clientwidth && event.clienty <0 || event.altkey) {window.open ('accountUnbound.jsp' ، '' ، 'height = 0 ، width = 0 ، top = 10000 ، left = 10000') ؛}}AccountUnbound.jsp: حذف المستخدم في ArrayList في النافذة المنبثقة
<٪ حساب حساب = (حساب) طلب. i ++) {account profectAccount = (account) logonAccounts.get (i) ؛ if (account.getAccountId (). equals (probuccount.getAccountId ())) {logonAccounts.Remove (account) ؛}}}}}}}}}}}}}}}}}}}}}}من أجل التأكد من أنه يمكن تنفيذ الكود أعلاه ، أغلق هذه النافذة المنبثقة بعد 3 ثوانٍ (تقع أيضًا في AccountUnbound.jsp)
<script> setTimeOut ("CloseWindow () ؛" ، 3000) ؛ Function CloseWindow () {window.close () ؛} </script>③ جعل تسجيل الدخول ينفذ httpsessionListener ، وتنفيذ أساليب SessionCreated و SessionDestroyed. حذف المستخدمين في ArrayList في SessionDestroyed (إذا كان المستخدم غير نشط لأكثر من 30 دقيقة ، فسيتم تنفيذ هذه الطريقة)
SessionDestroyed public void (حدث httpsessionevent) {// احصل على sessionId عند عدم نشاطه ، وحذف المستخدم في سلسلة logonascounts المقابلة SessionId = event.getSession (). getId () ؛ لـ (int i = 0 ؛ i <logonAccounts.size () ؛ i ++) {account proficalcount = (account) logonAccounts.get (i) ؛ if (account.getSessionId (). متساوٍ (الوجود.ملحوظة:
بالنسبة لما سبق ، نظرًا لأن النافذة المنبثقة يتم حظرها بسهولة بواسطة برنامج الحماية أو برنامج الأمان ، لا يمكن ظهر النافذة المنبثقة ، وبالتالي لا يمكن تسجيل الدخول إلى تسجيل الدخول على المدى القصير. في هذه الحالة ، يمكن استخدام Ajax بدلاً من النافذة المنبثقة. يتم تنفيذ الرمز الذي يحذف المستخدم في الخلفية ، ولكن لن يتم تقييده بواسطة جدار الحماية:
<script> // <! (http_request.overridemiMetype) {http_request.overridemiMetype ('text/xml') ؛}} آخر if (window.activexObject) {// ietry {http_request = new ActivexObject ("msxml2.xmlhtp" {http_request = new ActivexObject ("microsoft.xmlhttp") ؛} catch (e) {}}} if (! http_request) {ALERT ('التخلي :( لا يمكن إنشاء مثيل xmlhtp') ؛ alertcontents ؛ http_request.open ('get' ، url ، true) ؛ http_request.send (null) ؛} function alertcontents () {if (http_request.readystate == 4) {if (http_request.status = all 200) { طلب. ') ؛}}} هناك العديد من التفسيرات التفصيلية لرمز أياكس أعلاه على الإنترنت. إن إضافته إلى حدث إغلاق متصفح OnBeforeUnload () سيعمل بشكل جيد للغاية في الخلفية ، لذلك لا داعي للقلق بشأن المشكلة التي تفيد بأن النوافذ المنبثقة ستكون في بعض الأحيان غير صالحة.
بعد استخدام هذا الرمز ، يقوم رمز JS في accountUnbound.jsp في ما ورد أعلاه بإغلاق نافذة النافذة المنبثقة. لم يعد هناك حاجة.
ما سبق هو تنفيذ الويب Java على دالة تسجيل الدخول QQ التي يقدمها لك المحرر. يمكن للحساب واحد تسجيل الدخول إلى شخص واحد فقط في نفس الوقت. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!