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. ฉันกำลังใช้การรับรองความถูกต้องของ FORMS
3. โปรดใช้ System.Web.Security
protected void Application_AuthenticateRequest (ผู้ส่งวัตถุ EventArgs e)
-
สตริง strUserID = string.Empty;
สตริง strCompany = string.Empty;
ถ้า (คำขอมีการรับรองความถูกต้อง)
-
ข้อมูลประจำตัวของ FormsIdentity = (FormsIdentity) User.Identity;
ตั๋ว FormsAuthenticationTicket = Identity.Ticket;
strUserID = User.Identity.Name;
strCompany = ticket.UserData.Split("|".ToCharArray())[2];
-
อื่น
-
strUserID = คำขอ UserHostAddress;
strCompany = "ผู้เยี่ยมชม";
}
MemberOnlineInfo objOnline = ใหม่ MemberOnlineInfo (strUserID, Request.UserHostAddress, DateTime.Now.ToString(), Request.FilePath, strCompany)
;
ถ้า (!account.CheckUserOnline(strUserID))
บัญชีAddOnline(objOnline);
อื่น
account.UpdateOnline(objOnline);
//ลบสมาชิกที่หมดเวลา
บัญชี DeleteOnline();
-