閱讀855 返回首頁    go 阿裏雲 go 技術社區[雲棲]


如何顯示在線人數和所在位置

一、原理

在.net中的global.asax中有Application_AuthenticateRequest事件和Application_BeginRequest事件是在每次訪問aspx文件都會觸發。但是Application_BeginRequest中不能對已經經過FROMS身份驗證的身份ticket票進行識別。所以隻能放到Application_AuthenticateRequest中去。

我的實現原理是:每次訪問aspx文件時候都會判斷在線表裏麵是否有這個用戶(已經登錄了的記錄用戶名,沒有登錄的記錄IP地址),如果不存在,則將該用戶的身份、最後訪問時間、最後訪問IP、和最後訪問的URL存入數據庫。如果數據庫中已經曾在,則更新該記錄,把最後訪問時間,IP以及最後訪問URL更新。

同時,刪除數據庫中與當前時間間隔20分鍾以上的數據(20分鍾沒操作當為超時)。

二、優點

這樣,你不僅僅可以看到當前在線的準確人數,還知道是那些人在線,以及是否登陸,和訪問人數中已經是會員的比例,以及所在位置,並計算某個頁上的人數。

三、數據庫結構:

主鍵字段類型長度是否為空說明
1uson_serialint40序號
0uson_uservarchar200用戶名(沒登陸則為IP)
0uson_companyvarchar1000公司名(沒登陸則為'遊客')
0uson_ipvarchar200IP地址
0uson_datedatetime80最後操作時間
0uson_urlvarchar1000最後操作頁麵路徑

四、程序

注意:

1、程序位於global.asax中
2、我是使用的FORMS身份驗證
3、請usingSystem.Web.Security


protectedvoidApplication_AuthenticateRequest(Objectsender,EventArgse)
{
stringstrUserID=string.Empty;
stringstrCompany=string.Empty;
if(Request.IsAuthenticated)
{
FormsIdentityidentity=(FormsIdentity)User.Identity;
FormsAuthenticationTicketticket=identity.Ticket;
strUserID=User.Identity.Name;
strCompany=ticket.UserData.Split("|".ToCharArray())[2];
}
else
{
strUserID=Request.UserHostAddress;
strCompany="遊客";
}

MemberOnlineInfoobjOnline=newMemberOnlineInfo(strUserID,Request.UserHostAddress,DateTime.Now.ToString(),Request.FilePath,strCompany);

MemberAccountaccount=newMemberAccount();
if(!account.CheckUserOnline(strUserID))
account.AddOnline(objOnline);
else
account.UpdateOnline(objOnline);

//刪除超時的會員
account.DeleteOnline();
}

最後更新:2017-04-02 00:06:36

  上一篇:go 在ASP.NET中實現多文件上傳
  下一篇:go asp.net 2.0中一次性更新所有GRIDVIEW的記錄