如何顯示在線人數(shù)與所在位置
發(fā)表時(shí)間:2024-06-01 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]一、原理在.net中的global.asax中有Application_AuthenticateRequest事件和Application_BeginRequest事件是在每次訪問aspx文件都會(huì)觸發(fā)。但是Application_BeginRequest中不能對已經(jīng)經(jīng)過FROMS身份驗(yàn)證的身份ti...
一、原理
在.net中的global.asax中有Application_AuthenticateRequest事件和Application_BeginRequest事件是在每次訪問aspx文件都會(huì)觸發(fā)。但是Application_BeginRequest中不能對已經(jīng)經(jīng)過FROMS身份驗(yàn)證的身份ticket票進(jìn)行識(shí)別。所以只能放到Application_AuthenticateRequest中去。
我的實(shí)現(xiàn)原理是:每次訪問aspx文件時(shí)候都會(huì)判斷在線表里面是否有這個(gè)用戶(已經(jīng)登錄了的記錄用戶名,沒有登錄的記錄IP地址),如果不存在,則將該用戶的身份、最后訪問時(shí)間、最后訪問IP、和最后訪問的URL存入數(shù)據(jù)庫。如果數(shù)據(jù)庫中已經(jīng)曾在,則更新該記錄,把最后訪問時(shí)間,IP以及最后訪問URL更新。
同時(shí),刪除數(shù)據(jù)庫中與當(dāng)前時(shí)間間隔20分鐘以上的數(shù)據(jù)(20分鐘沒操作當(dāng)為超時(shí))。
二、優(yōu)點(diǎn)
這樣,你不僅僅可以看到當(dāng)前在線的準(zhǔn)確人數(shù),還知道是那些人在線,以及是否登陸,和訪問人數(shù)中已經(jīng)是會(huì)員的比例,以及所在位置,并計(jì)算某個(gè)頁上的人數(shù)。
三、數(shù)據(jù)庫結(jié)構(gòu):
主鍵 字段 類型 長度 是否為空說明
1uson_serialint40序號(hào)
0uson_uservarchar200用戶名(沒登陸則為IP)
0uson_companyvarchar1000公司名(沒登陸則為'游客')
0uson_ip varchar200IP地址
0uson_datedatetime80最后操作時(shí)間
0uson_urlvarchar1000最后操作頁面路徑
四、程序
注意:
1、程序位于global.asax中
2、我是使用的FORMS身份驗(yàn)證
3、請using System.Web.Security
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
string strUserID = string.Empty;
string strCompany = string.Empty;
if (Request.IsAuthenticated)
{
FormsIdentity identity = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = identity.Ticket;
strUserID = User.Identity.Name;
strCompany = ticket.UserData.Split(" ".ToCharArray())[2];
}
else
{
strUserID = Request.UserHostAddress;
strCompany = "游客";
}
MemberOnlineInfo objOnline = new MemberOnlineInfo(strUserID, Request.UserHostAddress, DateTime.Now.ToString(), Request.FilePath, strCompany);
MemberAccount account = new MemberAccount();
if (!account.CheckUserOnline(strUserID))
account.AddOnline(objOnline);
else
account.UpdateOnline(objOnline);
//刪除超時(shí)的會(huì)員
account.DeleteOnline();
}