使用Application和SessionID實現線上使用者列表統計
Application是一個共享物件,意味著所有訪問此應用程式的客戶均可以看到這個Application物件的值。使用Application和SessionID來統計當前線上人數。
程式碼
<%@ Application Language="C#" %>
<script runat="server">
void Application_Start(object sender, EventArgs e)
{ // 在應用程式啟動時執行的程式碼
System.Data.DataTable onlineUser = new System.Data.DataTable();
onlineUser.Columns.Add("SessionID");
onlineUser.Columns.Add("userIP");
onlineUser.Columns.Add("browser");
onlineUser.Columns.Add("osName");
onlineUser.AcceptChanges();
Application.Lock();
Application["onlineUser"] = onlineUser;
Application.UnLock();
}
void Application_End(object sender, EventArgs e)
{ // 在應用程式關閉時執行的程式碼
}
void Application_Error(object sender, EventArgs e)
{ // 在出現未處理的錯誤時執行的程式碼
}
void Session_Start(object sender, EventArgs e)
{ // 在新會話啟動時執行的程式碼
string sessionID = Session.SessionID;
string userIP = Request.UserHostAddress;
HttpBrowserCapabilities bc = Request.Browser;
string osName = bc.Platform;
string browser = bc.Type;
System.Data.DataTable userDt = Application["onlineUser"] as System.Data.DataTable;
if (userDt == null)
{
return;
}
System.Data.DataRow[] currentRow=userDt.Select("SessionID='"+sessionID+"'");
if (currentRow.Length <= 0)
{ //當前使用者沒有線上
System.Data.DataRow newRow =userDt.NewRow();
newRow["SessionID"] = sessionID;
newRow["userIP"] = userIP;
newRow["browser"] = browser;
newRow["osName"] = osName;
userDt.Rows.Add(newRow);
userDt.AcceptChanges();
Application.Lock();
Application["onlineUser"] = userDt;
Application.UnLock();
}
}
void Session_End(object sender, EventArgs e)
{ // 在會話結束時執行的程式碼。
// 注意: 只有在 Web.config 檔案中的 sessionstate 模式設定為
// InProc 時,才會引發 Session_End 事件。如果會話模式設定為 StateServer
// 或 SQLServer,則不會引發該事件。
string sessionID = Session.SessionID;
System.Data.DataTable userDt = Application["onlineUser"] as System.Data.DataTable;
if (userDt == null)
{
return;
}
foreach (System.Data.DataRow dr in userDt.Select("SessionID='" + sessionID + "'"))
{
userDt.Rows.Remove(dr);
}
userDt.AcceptChanges();
Application.Lock();
Application["onlineUser"] = userDt;
Application.UnLock();
}
</script>