您的位置:首页 > 移动开发

使用Application和SessionID实现在线用户列表统计

2010-05-28 22:22 831 查看
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>


还有一篇博文,通过Application和SessionID保证一个帐号只有一个在线http://www.cnblogs.com/heaiping/archive/2010/01/19/1651835.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐