您的位置:首页 > 编程语言 > ASP

ASP.NET 实现统计在线人数

2009-04-16 09:38 609 查看
在网上查了很多资料,有说到用iframe定时刷新来实现,我试着做了一个,感觉还不错。

1、首先需要在页面中添加<iframe style="display:none" id="ifr" src="User/Refresh.aspx"></iframe>使其隐藏,

Refresh.aspx负责往数据库中添加新用户并每3秒刷新一次来改变登入用户的最后时间。

在Refresh.aspx页面中添加

<script type="text/javascript">
setInterval('location.reload()',3000);
</script>

使页面每3秒刷新一次。

在Refresh.aspx.cs page_load函数中

string s = "-1";//-1为游客

if (this.Session["onlineid"] == null)//当用户刚登录时
{
string str = "insert into Map_online(userid) values("+s+"); select IDENT_CURRENT('Map_online')";
this.Session["onlineid"] = ExecuteSql(str);//执行sql语句并返回id
}
else//当刷新页面时
{
string strSql = "update Map_online set lastdate='" + DateTime.Now + "' where id=" + this.Session["onlineid"];//每3秒改一次最后登入时间
ExecuteSql(strSql);
}

2、登入的用户最后登入时间是不断的在刷新并与当前时间区别不大,当用户离开页面后最后登入时间停止刷新

所以用另一页面删除离开页面的用户。

同样在页面中添加<iframe style="display:none" src="User/RefData.aspx"></iframe>使其隐藏,

在RefData.aspx中添加

<script type="text/javascript">
setInterval('location.reload()',120000);
</script>

每两分钟清理一次数据库

在RefData.aspx.cs中

protected void Page_Load(object sender, EventArgs e)
{
string strSql = "select * from Map_online";
SqlDataReader sdr = ExecuteDataTable(strSql);
while (sdr.Read())

{
int i = DateTime.Now.CompareTo(Convert.ToDateTime(sdr["lastdate"].ToString()).AddSeconds(10));
if (i > 0)//数据未能及时更新
{
strSql = "delete from Map_online where id=" + sdr["id"].ToString();
ExecuteSql(strSql);
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: