〓مقدمة〓
يعرف أي شخص لديه بعض المنطق أنه من الواضح أن استخدام ASP للقيام بهذه الوظيفة أمر بعيد المنال، لأنه ليس مراسلة فورية مثل غرف الدردشة QQ أو MSN أو IRC، فكلها تعتمد على تحديث صفحة الويب لتغيير وقت النشاط الأخير لمعرفة ما إذا كان المستخدم متصلاً بالإنترنت، لذلك لا تتوقع أن يكون البرنامج التعليمي التالي مثاليًا، لقد قمت للتو بتسجيل وضع تفكيري. إذا كان هناك أي خطأ، فيرجى طلب المشورة من الخبراء!
-------------------------------------------------- ----------------------------------
〓النص〓
بداية، اسمحوا لي أن أقدم لكم فكرتي لتحقيق هذا التأثير، إذا كنت تستطيع أن تفهم بعد قراءة فكرتي، فلا داعي لقراءة هذا المقال...
لا يمكنني التفكير إلا في طريقتين لتنفيذ هذه الوظيفة:
1. قاعدة البيانات + أسب
قد يكون الأمر أكثر تعقيدًا، ولكنه مناسب للأنظمة التي بها عدد كبير من المستخدمين الذين قاموا بتسجيل الدخول.
2. طلب
استخدم كائن التطبيق: إذا كنت تقوم ببناء مجتمع كبير، فقد يتعين عليك إنشاء تطبيق لكل معرف تسجيل دخول. على الرغم من أن تصميم البرنامج سيكون أبسط، إلا أن هناك عددًا كبيرًا جدًا من المستخدمين الذين قاموا بتسجيل الدخول ولن يستهلك موارد الخادم أبدًا أدافع عنه هنا لأنه من السهل إنشاء كائن التطبيق عندما يقوم المستخدم بتسجيل الدخول، ولكن يجب تحريره بالكامل عندما يخرج المستخدم من النظام، حتى الآن، لم أر طريقة أفضل
لذلك دعونا نلقي نظرة على كيفية استخدام قاعدة البيانات + asp لحل مشكلة عدم إمكانية تسجيل الدخول لنفس الحساب في نفس الوقت!
اطلب أولاً من المستخدم إنشاء قاعدة بيانات. هنا نستخدم الوصول لإنشاء فقطNet118.mdb.
جدول البيانات 1: يقوم المستخدمون بتخزين معلومات تسجيل المستخدم
تم إعداد جداول البيانات التالية: uID (الرقم التلقائي) اسم المستخدم (نوع الحرف) userPass (نوع الحرف)
جدول البيانات 2: يقوم OnlyLogin بتخزين معلومات تسجيل الدخول المؤقتة للمستخدم
تم إعداد جداول البيانات التالية: OLname (نوع الحرف) OLtime (نوع التاريخ) OLip (نوع الحرف)
بعد إنشاء قاعدة البيانات، نضيف البيانات مباشرة إلى جدول المستخدمين يدويًا، ونضيف Net118 إلى جدول userName، ونضيف 111 إلى جدول userPass من أجل تسليط الضوء على محور مناقشتنا في هذه المقالة وإزالة الهراء غير الضروري، كلمة المرور يجب ألا يكون مشفرًا، ويجب أن يكون اسم المستخدم خاصًا به. Add~haha~
حسنًا، توجد الآن قاعدة بيانات للمستخدم في قاعدة البيانات، فلنقم بإنشاء واجهة تسجيل دخول المستخدم. انسخ الكود التالي واحفظه في الملف OnlyLogin.asp.
<أتش تي أم أل>
<الرأس>
<meta http-equiv=Content-Type content=text/html;
<title>يحظر Net118.COM تسجيل الدخول المتزامن لنفس الحساب من مناطق مختلفة</title>
</الرأس>
<الجسم>
<اسم النموذج=طريقةform1=إجراء النشر=loginPost.asp>
اسم المستخدم: <اسم الإدخال=نوع اسم المستخدم=معرف النص=حجم اسم المستخدم=15 الحد الأقصى للطول=5>
كلمة المرور: <اسم الإدخال=نوع userPass=معرف كلمة المرور=حجم userPass=15 الحد الأقصى للطول=15>
<نوع الإدخال=اسم الإرسال=قيمة الإرسال=تسجيل الدخول>
</النموذج>
</الجسم>
</html>
بعد الانتهاء، قم بإنشاء ملف تسجيل الدخول CONN.asp جديد، وانسخ الكود أدناه واحفظه! إنه متصل بقاعدة البيانات ولن أشرح ذلك كثيرًا ...
<%
خافت CONN_Net118
خافت Conn_T
خافت ممدد
mmdd=onlyNet118.mdb
اضبط CONN_Net118 = Server.CreateObject(ADODB.Connection)
Conn_T=Provider=Microsoft.Jet.OLEDB.4.0;مصدر البيانات= & Server.MapPath(&mmdd&)
على خطأ استئناف المقبل
CONN_Net118.فتح Conn_T
%>
بعد ذلك، نقوم بإنشاء ملف loginPost.asp الموجود أيضًا في هذا الدليل. وهذا أمر بالغ الأهمية. انظر بعناية إلى التعليمات البرمجية التالية:
<!--#include file=loginCONN.asp -->
<%
'قم بحذف المستخدمين النشطين خلال وقت maxTime، وقد تم تعريف maxTime في ملف تسجيل الدخول CONN.asp
Conn_Net118.Execute(حذف من فقط تسجيل الدخول حيث DATEDIFF('s',OLtime, now()) > & maxTime & )
'======================================================================== = =============
Dim rs، ts، txt، sql، اسم المستخدم، userPass
إذا Request.Form(Submit)=تسجيل الدخول إذن
userName=Request.Form(userName)'احصل على اسم تسجيل دخول المستخدم
userPass=Request.Form(userPass)' احصل على كلمة مرور تسجيل دخول المستخدم
'نظرًا لأننا لا نناقش المشكلات الأمنية هنا، فإن كلمات مرور المستخدم غير مشفرة.
تعيين rs = Server.CreateObject(ADODB.RECORDSET)
sql=SELECT * من المستخدمين حيث userName = ' & userName & ' و userPass = ' & userPass & '
rs.Open SQL، CONN_Net118،1،1
إذا لم يكن rs.eof بعد ذلك
اتصل بـ isOK(userName) 'استدعاء هذه العملية إذا كان اسم المستخدم وكلمة المرور صحيحين، فسيتم تخصيص isOK في البرنامج التالي.
آخر
Response.Write(<a href=javascript:history.go(-1)>اسم مستخدم أو كلمة مرور خاطئة</a>)
الاستجابة. النهاية ()
نهاية إذا
إغلاق
تعيين RS = لا شيء
نهاية إذا
Sub isOK (اسم المستخدم)
Dim Olip 'IP المحفوظ بواسطة اسم مستخدم تسجيل الدخول الحالي في قاعدة البيانات
Dim Oltime ' آخر مرة تم فيها تحديث صفحة الويب عندما يتم حفظ اسم مستخدم تسجيل الدخول الحالي في قاعدة البيانات هي بيانات مهمة لحساب ما إذا كان المستخدم متصلاً بالإنترنت.
Dim OLip1 'سجل عنوان IP لتسجيل الدخول للمستخدم الحالي، ويستخدم لتمييز ما إذا كان هو نفس المستخدم.
OLip1=Request.ServerVariables(REMOTE_ADDR)'الحصول على IP الخاص بالمستخدم الذي أرسل معلومات تسجيل الدخول
تعيين ts=Conn_Net118.execute(اختر * من تسجيل الدخول فقط حيث OLname='& userName &')
إذا لم يكن ts.eof ثم ' الاستعلام عن قاعدة البيانات لمعرفة ما إذا كان هناك أي معلومات تسجيل دخول لهذا المستخدم
OLtime = نهاية الخبر (OLtime)
OLip=ts(OLip)
إذا كان OLip1<>OLip وDateDiff(s,OLtime,now()) < maxTime إذن
'تحدد الجملة السابقة ما إذا كان عنوان IP الخاص بمستخدم تسجيل الدخول المقدم ليس هو آخر عنوان IP مسجل للمستخدم في قاعدة البيانات و
"إذا كان الفرق بين وقت آخر نشاط للمستخدم والوقت الحالي لا يتجاوز عدد الثواني المحدد، فسيتم التأكد من أن المستخدم متصل بالإنترنت حاليًا."
Response.Write <a href=javascript:history.go(-1)>هذا المستخدم متصل حاليًا. لا يمكنك تسجيل الدخول إلى هذا الحساب من أماكن أخرى! </أ>
الاستجابة. النهاية ()
آخر
'وإلا سيتم تحديد نجاح تسجيل الدخول وسيتم دفع القيمة للجلسة.
جلسة (lgName) = اسم المستخدم
جلسة (lgPass) = userPass
الاستجابة. إعادة توجيه تسجيل الدخولOK.asp
الاستجابة.النهاية
نهاية إذا
آخر
'إذا لم تكن قاعدة البيانات تحتوي على سجل مستخدم لتسجيل الدخول، فقم بتنفيذ العبارة التالية
خافت ليرة سورية
تعيين ls=Server.CreateObject(ADODB.RECORDSET)
ls.OpenSelect * من OnlyLogin,CONN_Net118,2,2
إضافة جديد
ls(OLname)=userName
ls(OLip)=OLip1
ليرة سورية (OLtime) = الآن ()
تحديث
ل.إغلاق
تعيين ليرة سورية = لا شيء
"تحديد تسجيل الدخول الناجح ودفع القيمة للجلسة."
جلسة (lgName) = اسم المستخدم
جلسة (lgPass) = userPass
الاستجابة. إعادة توجيه تسجيل الدخولOK.asp
الاستجابة.النهاية
نهاية إذا
النهاية الفرعية %>
إذا تمكنت من فهم ملفات asp، ستعرف بنظرة واحدة أنه بعد تسجيل الدخول بنجاح، ستنتقل الصفحة إلى loginOK.asp، فلنلقي نظرة على كود هذه الصفحة على الفور.
<نوع النمط=نص/css>
<!--
الجسم {لون الخلفية: #FF9900؛}
-->
</نمط>
<% IF Session(lgName)<> ثم %>
لقد قمت بتسجيل الدخول بنجاح! ! ! ما يلي هو إطار iframe تم تسلله إلى صفحة الويب لتحديث صفحة الويب في الوقت المحدد وإبلاغ الخادم بما إذا كنت متصلاً بالإنترنت.
ولتسهيل التمييز، نستخدم اللون الأبيض كلون خلفية لصفحة الويب ذات الإطار.
<حدود iframe=0 اسم=new_date هامش العرض=0 تباعد الإطارات=0 ارتفاع الهامش=0 src=loginFrame.asp
frameborder=0 noResize width=100 التمرير=no height=30 vspale=0></iframe>
<% آخر %>
لم تقم بتسجيل الدخول. مرحبًا بك في شبكة معلومات مشرفي المواقع: http://www.Net118.com
<% نهاية إذا %>
إذا كنت شخصًا حذرًا، فستعرف على الفور أن ما يتعين علينا القيام به بعد ذلك هو تسجيل الدخولFrame.asp
<!--#include file=loginCONN.ASP -->
<% CONN_Net118.Execute(تحديث مجموعة تسجيل الدخول فقط OLtime='& NOW() & ' Where OLname = ' & Session(lgName) & ') %>
<html><head><meta http-equiv=refresh content=<%=(maxTime-5)%>;
حسنًا، حتى الآن اكتمل برنامجنا. مفتاح هذا البرنامج هو تحديد ما إذا كان المستخدم متصلاً أم لا، وليس لدي خيار سوى استخدام FRAME لتداخل الورقة الرئيسية التي يتم تحديثها بانتظام لتحديد ما إذا كان المستخدم متصلاً بالإنترنت أم لا. هنا، في التشغيل الفعلي، يمكنك تغيير عرض وارتفاع iframe إلى 0 بحيث لا يتمكن المستخدمون العاديون من رؤيته، أو جعل لون خلفية صفحة الويب الخاصة بالبرنامج الرئيسي هو نفس لون خلفية البرنامج الرئيسي. متداخلة صفحة ويب يتم تحديثها بانتظام، وسوف يكون على ما يرام.
منذ وقت ليس ببعيد، رأيت أحد الأشخاص في منتدى المناقشة يقول إنه يمكن تحديد ذلك باستخدام أشياء مثل الجلسات وملفات تعريف الارتباط، ومن الواضح أن هذا مستحيل، لأن الكائنات التي ينشئونها تعمل على نفسها فقط، ولا يمكن مشاركة محتوى بياناتها مع مستخدمين آخرين على الكل. يجب أن يكون التطبيق طريقة أخرى لتحقيق هذا الغرض، لكنني تخليت عن هذه الفكرة عندما اعتقدت أنه إذا كان هناك العديد من المستخدمين الذين يقومون بتسجيل الدخول في نفس الوقت، فسيتم إنشاء واحد إلى ثلاثة كائنات تطبيق على الأقل لكل مستخدم، لأنه بعد ذلك لدينا الأصل سيتم بالتأكيد سحب الخادم السيئ إلى الأسفل ~