`
海淀区注册个昵称真难
  • 浏览: 8250 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

asp.net中显示在线用户

 
阅读更多

asp.net中显示在线用户

private static System.Threading.Timer timer;
private const int interval = 1000 * 60 * 20;//
检查在线用户的间隔时间


/// <summary>
///
必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
public Global()
{
InitializeComponent();
}

protected void Application_Start(Object sender, EventArgs e)
{
if (timer == null)
timer = new System.Threading.Timer(new System.Threading.TimerCallback(ScheduledWorkCallback),
sender, 0, interval);
DataTable userTable = new DataTable();
userTable.Columns.Add("UserID");//
用户ID
userTable.Columns.Add("UserName");//
用户姓名

userTable.Columns.Add("FirstRequestTime");//
第一次请求的时间
userTable.Columns.Add("LastRequestTime");//
最后一次请求的时间
userTable.Columns.Add("ClientIP");//
userTable.Columns.Add("ClientName");//
userTable.Columns.Add("ClientAgent");//

userTable.PrimaryKey = new DataColumn[]{userTable.Columns[0]};
userTable.AcceptChanges();
Application.Lock();
Application["UserOnLine"] = userTable;
Application.UnLock();
}

protected void Session_Start(Object sender, EventArgs e)
{
}
protected void Application_BeginRequest(Object sender, EventArgs e)
{

}
protected void Application_EndRequest(Object sender, EventArgs e)
{
}
protected void Application_AcquireRequestState(Object sender, EventArgs e)
{
if(sender == null) return;
if(!(sender is HttpApplication)) return;
HttpApplication mApp = (HttpApplication)sender;
if(mApp.Context.Session == null) return;
if(mApp.Context.Session["UserID"]==null ) return;
string userID = mApp.Context.Session["UserID"].ToString();

if(Application["UserOnLine"] == null) return;
if(!(Application["UserOnLine"] is DataTable)) return;

DataTable userTable = (DataTable)Application["UserOnLine"];
DataRow curRow = userTable.Rows.Find(new object[]{userID});
if(curRow != null)
{
this.GetDataRowFromHttpApp(mApp,ref curRow);
}
else
{
DataRow newRow = userTable.NewRow();
this.GetDataRowFromHttpApp(mApp,ref newRow);
userTable.Rows.Add(newRow);
}
if(userTable.GetChanges()!=null)
{
userTable.AcceptChanges();
Application.Lock();
Application["UserOnLine"] = userTable;
Application.UnLock();
}
}

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{

}
protected void Application_Error(Object sender, EventArgs e)
{

}

protected void Session_End(Object sender, EventArgs e)
{

}
protected void Application_End(Object sender, EventArgs e)
{

}

#region Web
窗体设计器生成的代码
/// <summary>
///
设计器支持所需的方法 - 不要使用代码编辑器修改
///
此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
}
#endregion
private void GetDataRowFromHttpApp(HttpApplication mApp,ref DataRow mRow)
{
if(mApp.Context.Session == null) return;
if(mApp.Context.Session["UserID"]==null || mApp.Context.Session["UserName"]==null) return;
string userID = mApp.Context.Session["UserID"].ToString();
string userName = mApp.Context.Session["UserName"].ToString();
if(mRow.RowState == DataRowState.Detached)
{
mRow["UserID"] = userID;
mRow["UserName"] = userName;
mRow["FirstRequestTime"] = System.DateTime.Now;
mRow["ClientIP"] = mApp.Context.Request.UserHostAddress;
mRow["ClientName"] = mApp.Context.Request.UserHostName;
mRow["ClientAgent"] = mApp.Context.Request.UserAgent;
mRow["LastRequestTime"] = System.DateTime.Now;
}
else if(!mRow.IsNull("LastRequestTime"))
{
DateTime time = Convert.ToDateTime(mRow["LastRequestTime"] );
if(((TimeSpan)(DateTime.Now - time)).TotalMinutes>1)
mRow["LastRequestTime"] = System.DateTime.Now;
}
}
private void ScheduledWorkCallback (object sender)
{
string filter = "Convert(LastRequestTime,'System.DateTime') < Convert('" + System.DateTime.Now.AddSeconds(-interval/1000).ToString() + "','System.DateTime')";
if(Application["UserOnLine"] == null)
return;
DataTable userTable = (DataTable)Application["UserOnLine"];
DataRow[] lineOutUsers = userTable.Select(filter);
for(int i=0;i<lineOutUsers.Length;i++)
{
DataRow curRow = lineOutUsers[i];

//
保存到数据库...
}
if(userTable.GetChanges()!=null)
{
userTable.AcceptChanges();
Application.Lock();
Application["UserOnLine"] = userTable;
Application.UnLock();
}
}
}

分享到:
评论

相关推荐

    ASP.NET实现在线人员实时统计显示

    ASP.NET实现在线人员实时统计显示 做了一个简单的在线人员显示的功能,总结了一下,思路如下: 1、定义一个全局的内存来作为在线人员列表 2、通过实时判断用户Session值,来判断某个用户的登录或离线 3、对于用户的...

    asp.net中密码强度显示代码

    asp.net中密码强度显示代码,在程序中做密码显示强度,可以提示用户填写的密码复杂程度,很有用的。

    asp.net 在线查看TIF图片

    asp.net 方便用户浏览在线查看TIF图片

    asp与asp.net的区别

    实际上我们可以把ASP.Net的执行过程看做是编译后的普通语言运行时代码充当一个和前端浏览器和中间件用户交互的应用程序,它接受用户的请求,输出HTML流到客户端显示。除此之外,ASP.Net还可以利用.Net平台架构的诸多...

    ASP.NET编程百例(PDF)

    ASP.NET是微软.NET战略中的一个重要成员,除了可以使用Visual C#、VB.NET、VisualC++.NET、JScript.NET等语言编写外,还可以使用第三方的.NET接口(如COBOL.NET、 Perl.NET等)进行编写。本书通过100个精彩实例...

    ASP.NET页面中使用Google Map

    但是,对于我来说,在ASP.NET页面中使用JavaScript来调用Google Map的API有一定难度,尤其是利用服务器端函数来动态画出Google Map。例如,我想从SQL Server中读取经纬度信息,然后在Google Map中插入一个点。如果...

    十天学会ASP.net--我认为ASP.NET比ASP难很多,希望大家做好准备

    在ASP里面我们读取数据就直接用RECORDSET,然后在HTML代码里面穿插就可以显示了,但是ASP.NET讲究的是代码分离,如果还是这样显示数据就不能代码分离了。所以我们有两种方法:如果是读取一条记录的数据或者不多的...

    asp.net Ajax DropDownList,asp.net下拉列表,自定义DropDownList

    asp.net Ajax DropDownList,asp.net下拉列表,自定义DropDownList 1.开发背景: A.Html Select标签不支持输入值 B.风装Ajax js 实现查询,检索数据库信息 C.用户体验. D.支持多选 E.将js和asp.net Web窗体独立开...

    《asp.net中的窗体身份验证(完整篇之五:不同的角色访问不同的目录)》源代码

    博文《asp.net中的窗体身份验证(完整篇之五:不同的角色访问不同的目录》中的源代码

    asp.net登录页面设计

    在Visual Studio中创建ASP.NET项目 所有页面要求采用代码后置的编码方式 在项目中添加登录页面login.aspx,效果见下图 实现没有登录重定向到登录页面login.aspx 用户首次登录网站给出用户名和密码的输入...

    在线编辑office的神器PageOffice For ASP.NET

    作为ASP.NET项目的开发者,在应对用户的Word、Excel文档时,您是否迫切希望Visual Studio工具箱里能有现成的Word、Excel标准ASP.NET控件可用就太好了?现在梦想已经成真,想在网页上显示编辑Word、Excel文档并且调用...

    asp.net进度条控件,asp.net进度条[asp.net2.0]

    asp.net进度条控件,asp.net进度条[asp.net2.0] 本控件使用XMLHTTP组件在浏览器端异步请求进度条实时数据,同时由特定的Http Module进行快速响应,不会因为用户的高负载操作而轻易失去响应,或者阻塞。可以根据不同...

    asp.net留言板

    森林Asp.Net留言板2005.11版 ********************************** 如果您是新用户,请直接将本程序的所有文件上传服务器,即可正常使用,然后根据您得实际 需求进行一下操作 默认主页:index.aspx 欢迎访问:...

    ASP.NET.4揭秘

    9.3 在sqldatasource控件中使用asp.net参数308 9.3.1 使用asp.net参数对象308 9.3.2 使用asp.net的controlparameter对象311 9.3.3 使用asp.net的cookieparameter对象315 9.3.4 使用asp.net的formparameter对象317 ...

    asp.net知识库

    ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则表达式 delegate vs. event 我是谁?[C#] 表达式计算引擎 正式发布表达式计算引擎WfcExp V0.9(附源码) 运算表达式类的原理及其实现 #实现的18位身份证...

    asp.net实现用户一登陆实现欢迎提示的托盘

    asp.net实现用户一登陆实现欢迎提示的托盘,很好用的。。。

    ASP.NET AJAX

    客户端代码将使用ASP.NET AJAX Library中的PageRequestManager,在UpdateProgress控件中,将添加一个Button,来允许用户取消异步更新,并且使用客户端脚本来显示或者隐藏进度信息,翻译自官方文档。 ASP.NET AJAX...

    ASP.NET应用开发案例教程

    8.3 ASP.NET应用程序中的用户状态管理 8.3.1 Global.asax文件概述 8.3.2 Application对象事件 8.3.3 Session对象事件 8.3.4 其他几种客户端的用户状态管理方法 8.3.5 本小节提示 8.4 ASP....

    asp.net 显示固定行数的 GridView

    asp.net 显示固定行数的 GridView

    基于ASP.NET二手交易系统源码

    本系统为ASP.NET架构,后台采用C#进行编写,数据库使用SQL Server,前台由JS进行控制,数据异步采用ajax 用户可以进行商品发布,可以购买他人的商品,附带购物车,可以查看订单明细, 用户可以发布我的求购,可以查看我的...

Global site tag (gtag.js) - Google Analytics