1. المبدأ في global.asax في .net، توجد أحداث Application_AuthenticateRequest وأحداث Application_BeginRequest التي يتم تشغيلها في كل مرة يتم فيها الوصول إلى ملف aspx. ومع ذلك، لا يمكن لـ Application_BeginRequest التعرف على تذاكر الهوية التي خضعت لمصادقة FROMS. لذا لا يمكن وضعه إلا في Application_AuthenticateRequest.
مبدأ التنفيذ الخاص بي هو: في كل مرة يتم فيها الوصول إلى ملف aspx، سيتم الحكم على ما إذا كان هناك هذا المستخدم في الجدول عبر الإنترنت (تم تسجيل اسم المستخدم، ولم يتم تسجيل عنوان IP)، إذا لم يكن موجودًا وهوية المستخدم، وأخيرًا، يتم تخزين وقت الوصول وآخر عنوان IP تم الوصول إليه وآخر عنوان URL تم الوصول إليه في قاعدة البيانات. إذا كان موجودًا بالفعل في قاعدة البيانات، فقم بتحديث السجل وتحديث آخر وقت وصول وIP وعنوان URL الأخير للوصول.
وفي الوقت نفسه، احذف البيانات الموجودة في قاعدة البيانات التي تفصلها أكثر من 20 دقيقة عن الوقت الحالي (لا تعتبر أي عملية لمدة 20 دقيقة بمثابة مهلة).
2. المزايا: لا يمكنك فقط معرفة العدد الدقيق للأشخاص المتصلين حاليًا، ولكن أيضًا معرفة الأشخاص المتصلين بالإنترنت، وما إذا كانوا مسجلين الدخول، ونسبة الزوار الأعضاء، وموقعهم، وحساب عدد الأشخاص على صفحة معينة .
3. هيكل قاعدة البيانات:
طول نوع حقل المفتاح الأساسي سواء كان فارغًا أم لا
1uson_serialint40 الرقم التسلسلي
اسم المستخدم 0uson_uservarchar200 (IP إذا لم تقم بتسجيل الدخول)
اسم الشركة 0uson_companyvarchar1000 (إذا لم تقم بتسجيل الدخول، فهو "زائر")
عنوان 0uson_ip varchar200IP
0uson_datedatetime80 وقت التشغيل الأخير
0uson_urlvarchar1000 مسار صفحة العملية الأخيرة
4. ملاحظات البرنامج:
1. البرنامج موجود في global.asax
2. أنا أستخدم مصادقة النماذج.
3. الرجاء استخدام System.Web.Security
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
string strUserID = string.Empty;
string strCompany = string.Empty;
إذا (الطلب.IsAuthenticated)
{
هوية FormsIdentity = (FormsIdentity)User.Identity;
تذكرة FormsAuthenticationTicket = الهوية.Ticket;
strUserID = User.Identity.Name;
strCompany = Ticket.UserData.Split("|".ToCharArray())[2];
}
آخر
{
strUserID = Request.UserHostAddress;
strCompany = "زائر";
}
MemberOnlineInfo objOnline = new MemberOnlineInfo(strUserID, Request.UserHostAddress, DateTime.Now.ToString(), Request.FilePath, strCompany
account = new memberAccount();
إذا (!account.CheckUserOnline(strUserID))
account.AddOnline(objOnline);
آخر
account.UpdateOnline(objOnline);
//حذف الأعضاء الذين انتهت المهلة
account.DeleteOnline();
}