鲲鹏

北冥有鱼,其名为鲲。鲲之大,不知其几千里也。 化而为鸟,其名为鹏。鹏之背,不知其几千里也。
怒而飞,其翼若垂天之云。
posts - 35, comments - 66, trackbacks - 2, articles - 1
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

.NET 2005 实现在线人数统计

Posted on 2007-01-23 10:12 Sunlight 阅读(3786) 评论(20)  编辑 收藏

前几天有个朋友问起如何在.NET 2005中实现网站在线人数的统计,因为我们用的是C#,记得当时在网上找了好久也没找到适和的方法,最近不是很忙,在网上找了一些资料研究了一下,差不多已经能实现了,现将代码共享一下:

首先在项目中选择“添加新项”,添加“Global.asax”全局变量文件,修改其中的 Session_Start 和 Session_End 方法;代码如下:

 void Session_Start(object sender, EventArgs e)
    {
        // 在新会话启动时运行的代码
        Session.Timeout = 5; //设置Session的有效时间,可根据需要修改
        Application.Lock();
        Application["zzzonline"] = Convert.ToInt32(Application["zzzonline"]) + 1;
        Application.UnLock();
    }

    void Session_End(object sender, EventArgs e)
    {
        // 在会话结束时运行的代码。
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
        // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
        // 或 SQLServer,则不会引发该事件。
        Application.Lock();
        Application["zzzonline"] = Convert.ToInt32(Application["zzzonline"]) - 1;
        Application.UnLock();
    }

这样就可以在.aspx页面调用了;
<asp:Label ID="Label1" runat="server">当前在线&nbsp;<font color=red><%=Application["zzzonline"]%></font>&nbsp;人</asp:Label>

Feedback

#1楼    回复  引用  查看    

2007-01-23 10:15 by teana      
学习了。。

#2楼    回复  引用    

2007-01-23 11:05 by qiekong [未注册用户]
Session.Timeout = 5;
会不会影响其他页的生命周期,导致超时现象发生

#3楼    回复  引用    

2007-01-23 11:10 by 嗨嗨 [未注册用户]

#4楼    回复  引用  查看    

2007-01-23 11:25 by 曾哲      
...........................

#5楼    回复  引用    

2007-01-23 11:27 by hehe [未注册用户]
在2003上为什么不好使?

应该也能实现才对啊

#6楼    回复  引用  查看    

2007-01-23 11:37 by jhtchina      
Mark

#7楼    回复  引用    

2007-01-23 11:48 by Money [未注册用户]
Session.Timeout = 5;
会不会影响其他页的生命周期,导致超时现象发生
这样子的话,根本不能用啊,
Session才5分钟,人家都不用做别的事情了

#8楼    回复  引用    

2007-01-23 12:27 by It's Me! [未注册用户]
这种用Seesion的方式都不能提供真实的数据。

#9楼    回复  引用  查看    

2007-01-23 12:27 by lwjj      
学习一下。。。

#10楼    回复  引用    

2007-01-23 13:33 by gyf19 [未注册用户]
方法不好!

#11楼    回复  引用  查看    

2007-01-23 13:45 by DavidFa      
不实用!

#12楼 [楼主]   回复  引用  查看    

2007-01-23 14:09 by Sunlight      
Session.Timeout = 5;
在这里它不决定这个程序的运行!没有它在线人数照样可以统计,你可以根据自己的需求将它改的大一点就OK了!!比如:Session.Timeout = 55;

#13楼    回复  引用  查看    

2007-01-23 14:31 by aspnetx      
和asp一样的思路

只是为了说得更准确些,建议楼主使用如下标题:
VS2005下实现asp.net在线人数的统计
ASP.NET2.0实现在线人数的统计
C#实现在线人数的统计

.net是框架,最新的版本是3.0,当然楼主所描述的是2.0,对应的asp.net版本是2.0
2005通常来说指的就是visual studio,它是个IDE
而在叫法上,vs2003.net是.net1.1的IDE,而vs2005(注,没有.net,就是vs2005)是2.0的IDE,当然3.0现在也可以

#14楼    回复  引用    

2007-01-23 15:07 by 个人知识空间 [未注册用户]
这个方法行吗?

#15楼    回复  引用  查看    

2007-01-23 17:09 by Cat Chen      
其实至今为止也没有比当年ASP更准确的在线人数统计法出现啊,无论如何都是通过Session的Start和End来统计,总会有一定的偏差(Session.Timeout范围内),除非你做成Comet应用吧。

ASP.NET比ASP先进的地方时,Session除了可以保存在InProc,还可以保存到StateServer或SqlServer,但如果不是保存在InProc,则End事件不会被触发,这是需要说明的。

#16楼    回复  引用  查看    

2007-01-24 01:41 by IcE      
确实是比较老的方法了.

这种方法不是很好,不过也不知道什么方法更好.将就着用也是可以的.

#17楼    回复  引用    

2007-01-24 09:55 by 天天向上 [未注册用户]
这个方法确实有点古老,并且不是很精确。.net 2.0 下,可以有很好的法子得到精准的在线人数统计。
请查看应用示例:
http://www.gp2.cn/BbsMain.aspx

#18楼    回复  引用    

2007-09-18 16:21 by huankfe [未注册用户]
太烂了,根本用不了
一点实用价值都没有

#19楼    回复  引用  查看    

2008-06-04 07:44 by .NetUser      
有没有比较先进一些的在线人数?

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-01-23 15:17 编辑过
 
另存  打印