عند إنشاء موقع ويب للتواصل عبر الإنترنت، هناك مشكلة تسبب لي الصداع، وهي تتعلق بإحصائيات الوقت الفعلي للمستخدمين عبر الإنترنت، حيث يتطلب العميل: حساب العدد الحالي للأشخاص عبر الإنترنت، وعدد الزوار، وعدد الأعضاء ، وقائمة المستخدمين المتصلين بالإنترنت، بما في ذلك الزوار والأعضاء وعضو الإدارة (إذا كان زائرًا، يتم إنشاء معرف الزائر تلقائيًا، وإذا كان عضوًا، فسيتم عرض اسم العضو). نظرًا لأنه يتطلب أداءً في الوقت الفعلي، سأقوم أولاً بتمرير فكرة استخدام global.asa لحلها.
مفتاح المشكلة هو كيفية تحديد مغادرة المستخدم، وكيفية تنفيذ ملف أو وظيفة عندما يغادر المستخدم.
وبعد المناقشة مع بعض الأصدقاء على الإنترنت، تمكنت أخيرًا من حل هذه المشكلة.
مبدأ الحل هو: كتابة صفحة عالمية. ما يسمى بالصفحة العالمية يعني أن كل صفحة في التطبيق تحتوي على هذه الصفحة، على سبيل المثال: header.asp، في هذه الصفحة، اكتب جزءًا من التعليمات البرمجية باستخدام وظيفة XMLHTTP الكود هو يتم إرسال طلب إلى الخادم كل 10 ثوانٍ أو 20 ثانية، بغرض تحديث وقت اتصال المستخدم الحالي وحذف المستخدمين الذين يتجاوز وقت اتصالهم وقتًا معينًا، بحيث يحتفظ المستخدم المتصل بالإنترنت في قاعدة البيانات بوقت حقيقي معين -طبيعة الوقت.
طريقة التنفيذ الرئيسية هي:
إنشاء قاعدة بيانات جديدة، أسماء الحقول هي: المعرف (الحرف)، الاسم (الحرف)، المستخدم (الرقم)، tt (التاريخ)، المسؤول (رمز السلطة، 0 مستخدم عادي، 1-مسؤول)
الجدول الاسم :
رأس على الإنترنت ↓
=============================================== === =================
<%
... ...
إذا كانت الجلسة("s_in")<>1 والجلسة("s_name")="" ثم "إذا" يقوم المستخدم بتسجيل الدخول مرة واحدة إلى
rs.open "select * from online"، conn,3,3
rs.addnew
rs("id")=session.sessionID
rs("name")="ضيف" ومعرف الجلسة
rs("user")=0 '0 يعني أن المستخدم لم يقوم بتسجيل الدخول وهو زائر.
rs("tt")=الآن
rs.update
rs. Close
session("s_in")=1 'تم تخزين معلومات المستخدم في قاعدة البيانات، مما يشير إلى أنه متصل بالإنترنت
end if
if session("s_name")<>"" ثم "إذا قام المستخدم بتسجيل الدخول من خلال مربع تسجيل الدخول."
rs.open "اختر * من الإنترنت حيث id='" & session.sessionID & "'"،conn,3,3
rs("name")=جلسة("s_name")
rs("admin")=session("s_admin") 'تحديث اسم المستخدم إلى اسم العضو
rs("user")=1 'يشير إلى أن المستخدم قد قام بتسجيل الدخول وأنه عضو
rs("tt")=now 'اضبط وقت النظام الحالي على وقت تسجيل دخول المستخدم
rs.update
rs. Close
النهاية إذا
... ...
%>
... ...
<head>
... ...
<script language=javascript>
اختبار الوظيفة ()
{
var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP");
xmlhttp.open("POST"، "onceonline.asp"، false؛ // أرسل طلب التحديث إلىnceonline.asp)؛
xmlhttp.setRequestHeader("CONTENT-TYPE"،"application/x-www-form-urlencoded");
xmlhttp.send();
}
setInterval("Test();",10); //أرسل طلب تحديث كل 10 ثوانٍ
</script>
... ...
</head>
... ...
======================= ====================
مرة واحدة على الإنترنت.asp
<%
rs.open "اختر tt من الإنترنت حيث id='" & session.sessionID & "'"،conn,3,3
rs("tt")=now() 'قم بتحديث وقت اتصال المستخدم الحالي المتصل بالإنترنت
rs.update
rs.إغلاق
rs.open "حذف من الإنترنت حيث datediff('s',tt,now())>60",conn,3,1 'حذف مستخدم المهلة
%>
=============================================================================== ==============
بهذه الطريقة، يتم ضمان طبيعة الوقت الفعلي لقائمة المستخدمين في قاعدة البيانات بشكل أساسي. يعتمد الخطأ على الفرق بين وقت التحديث ووقت الحذف سرعة معالجة الخادم يوصى بعدم انتهاء مهلة الحذف إذا كان الفاصل الزمني بين المستخدمين صغيرًا جدًا، فقد يؤدي ذلك إلى حدوث أخطاء بين المستخدمين عبر الإنترنت.
لقد تم تصحيح هذا الحل على WIN2000+SQL Server2000 نظرًا لأن هذا الحل يتطلب متطلبات نظام كبيرة نسبيًا، آمل أن يتوصل الأصدقاء الآخرون إلى حلول أفضل ويحلون هذه المشكلة معًا!
صندوق البريد الخاص بي: [email protected]
اسمي "Building Blocks"، مرحبا بكم في أن تصبحوا أصدقاء معي!