إن فكرة التنفيذ لـ Javaweb التي يمكنها تسجيل الدخول فقط في مكان واحد في نفس الوقت (على غرار وظيفة تسجيل الدخول QQ) هي كما يلي:
1. ما هي وظيفة هذه الوظيفة؟
الجميع يفكر في ذلك. على أي حال ، سيكون هناك دائمًا مثل هذا الطلب. لن يكون هناك طلب هذه الأيام. . هيه. في بعض الأحيان قد لا يكون ذلك مطلبًا ، ومن المحتمل جدًا أن يفعل ذلك أيضًا من أجل السلامة. على سبيل المثال ، يعد نظام الفحص ونظام الدردشة عبر الإنترنت ضروريين للقيام بذلك.
2. عملية التنفيذ
أ. تحليل المشكلة
في النظام ، عادة ما نربط معلومات تسجيل الدخول بالجلسة. يبدو أنه من الممكن العثور على حل. بعبارة صريحة ، عند تسجيل الدخول ، حدد ما إذا كان المستخدم قد تم تسجيل الدخول. إذا قام بتسجيل الدخول ، فسيكون من المقبول مسح الجلسة السابقة. . يبدو الأمر بسيطًا جدًا ، أليس كذلك؟ في الواقع ، إذا كنت تفكر في الأمر بعناية ، فستجد المشكلة التالية: كيفية تسجيل الدخول من قبل ، أي كيفية الوصول إلى جميع معلومات الجلسة التي تم تسجيلها؟
ب. تنفيذ محدد
كما نعلم جميعًا ، يبدو أنه لا توجد طريقة محددة للحصول على جميع معلومات الجلسة مباشرة في API J2EE. ولكن يمكننا مراقبة جميع عمليات إنشاء الجلسة والتدمير من خلال تكوين المستمعين ، وكذلك مراقبة عمليات إنشاء السمات والحذف والاستبدال في الجلسة.
في الواقع ، نحتاج فقط إلى القيام بما يلي:
عند حفظ معلومات تسجيل دخول المستخدم إلى الجلسة ، فإن الجلسة المقابلة هي العملية المنسوبة لإنشاء سمة ، والتي يمكنها تسجيل الجلسة الحالية في قائمة ArrayList.
في الواقع ، عند حفظها في القائمة ، يجب عليك أولاً اجتياز ما إذا كانت هناك معلومات تسجيل الدخول للمستخدم موجودة بالفعل في هذه القائمة. إذا كانت موجودة ، فقم بتدمير معلومات الجلسة الموجودة في هذه القائمة وإزالتها من القائمة. إذا لم يكن موجودًا ، فضع معلومات الجلسة في القائمة.
عند تدمير معلومات تسجيل الدخول الخاصة بالجلسة ، قم بإزالة الجلسة من القائمة مباشرة.
أيضًا ، عندما يقوم المستخدم بتسجيل الدخول دون تسجيل الخروج والتسجيل مباشرة ، فهذه عملية لاستبدال سمة الجلسة. من الضروري أيضًا تحديد ما إذا كان المستخدم الجديد موجودًا بالفعل في جلسات أخرى إلى جانب الجلسة الحالية. إذا كان موجودًا ، احذفه.
الرمز المحدد كما يلي:
package com.weirhp ؛ import java.util.arraylist ؛ import java.util.collections ؛ import java.util javax.servlet.http.httpsessionevent ؛ import javax.servlet.http.httpsessionlister ؛ {sessions = collections.synchronizedList (new ArrayList <SessionAnduser> ()) ؛}} public void attributeadded (httpsessionbindebingevent e) {httpsession session = (attrname.equals (logInFlag)) {user nowuser = (user) (tem.getuserid (). يساوي (nowuser.getName ())) {tem.getSession (). perilated () ؛ // call removeBreak ؛}} sessanduser sau = جديد SessionAnduser () ؛ sau.setuserid (nowuser.getName ()) ؛ sau.setsession (جلسة) ؛ sau.setsid (session.getid ()) ؛ sessions.add (sau) ؛}} الفراغ العام المنسمي (httpsessionbindebindingevent e) {httpsession = E.GetSession () ؛ system.out.println ("-------------*ابدأ إزالته*-------------------------") ؛ string attrname = i> = 0 ؛ i--) {sessionanduser tem = sessions.get (i) ؛ if (tem.getuserid (). equals (nowuser.getName ())) {sessions.remove (i) ؛ break ؛}}} e.getSession () ؛ system.out.println ("-------------*ابدأ استبدال*-----------------------") ؛ string attrname = (مستخدم) session.getAttribute (logInFlag) ؛ // المستخدم في الجلسة الحالية // يعبر جميع الجلسة (int i = sessions.size ()-1 ؛ {system.out.println ("إزالة: إبطال 1!") ؛ dels = i ؛} آخر if (tem.getsid (). equals (session.getId ())) {tem.setuserid (nowuser.getName ()) ؛}} if (dels! =-1) {sessions.get (dels). أبطل. ستتم إزالتها أيضًا من الجلسات}}} public void sessioncreated (httpsessionevent e) {} public void sessiondestroyed (httpsessionevent e) {}}صياغة في web.xml
<StaNER> <SIDEW-NAME> Recordsession </Display-NAME> <CANDER-CLASS> COM.WEIRHP.RECORDSessionListener </stanker-class> </stanker>
3. المشاكل المحتملة
قد يكون هناك بعض الأشياء التي لم يتوقعها البرنامج بأكمله. قد يكون هناك بعض الأخطاء ، ويجب أن تكون حذرًا عند استخدامها في مشاريع محددة. الجميع مرحب بهم لإنشاء صورة ويأمل في تقديم بعض الاقتراحات. سأحسنه مرة أخرى.
4. بعض الأفكار لاحقًا
إذا استخدمت كلتا الجهازين نفس الحساب لتسجيل الدخول إلى النظام في نفس الوقت ، فهل يمكن تسجيل كلا الحسابين بنجاح؟ . (أيضًا ، عندما تكون قائمة الجلسة كبيرة جدًا ، قد تقوم أجهزتين بتسجيل الدخول بنجاح عند تسجيل الدخول إلى النظام باستخدام نفس الحساب في نفس الوقت خلال فترة اجتياز). متشابك جدا. . كيف يجب التحكم فيها؟
(الحل: بعد الاختبار ، يمكن للمستمع أن يكون مستمعًا في النظام. يمكن أن تضمن إضافة الكلمة الرئيسية المزامنة إلى طريقته سلامة مؤشر ترابط القائمة.)
ما سبق هو Javaweb الذي قدم لك أن المحرر لا يمكنه تسجيل الدخول إلا في مكان واحد في نفس الوقت (على غرار وظيفة تسجيل الدخول QQ). آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!