精确统计在线人数100分

rczjp 2009-10-21 11:28:13
如果是Session的话会出现超时等情况,这样计算就不精确了
使用Global.asax的方法是什么,在网上也有自己写方法的,一般最好是怎么做呢?
有什么最简单却最好的方法呢?
...全文
494 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lezen 2009-11-02
  • 打赏
  • 举报
回复
学习
smtp2009 2009-10-21
  • 打赏
  • 举报
回复
ding....
laomeng520 2009-10-21
  • 打赏
  • 举报
回复
application
lerit 2009-10-21
  • 打赏
  • 举报
回复
还没有精确统计人数的呢,只能是接近,因为你无法预测客户端如何结束会话
wuyq11 2009-10-21
  • 打赏
  • 举报
回复
Session退出时实现人数统计不准确。非法关机或关闭IE不会执行
要记录用户日志和操作时间,再用定时器刷新计算用户
已经有固定时间没有活动的用户,然后删除
http://topic.csdn.net/u/20090529/10/35747769-cb13-46f4-927c-6c6bc46d338a.html
rczjp 2009-10-21
  • 打赏
  • 举报
回复
嗯 不能精确统计和HTTP协议是种无状态的协议有什么关系,请指教
另外如果用Session的话,经常一会就超时了,怎么解决呢?
hujia0815 2009-10-21
  • 打赏
  • 举报
回复
用application
rczjp 2009-10-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pupo 的回复:]
HTTP协议是种无状态的协议,要精确统计不太可能。可以用Session启动、结束、过期来进行判断或者在数据库中建个表保存在线用户,每次访问时刷新该用户最新访问时间,如果在设定的时间内刷新时间过期则将该用户从表中删除,比较简单的做法是在Global.asax文件中写代码


public class Global : System.Web.HttpApplication
    {

        protected void Application_Start(object sender, EventArgs e)
        {
            Application["Count"] = 0;
        }

        protected void Session_Start(object sender, EventArgs e)
        {
            Application["Count"] = (int)Application["Count"] + 1;
        }


        protected void Session_End(object sender, EventArgs e)
        {
            if ((int)Application["Count"] > 0) Application["Count"] = (int)Application["Count"] - 1;
        }

    }
[/Quote]现在我的写法是这样的,看有什么需要修改的
因为我是统计登录的在线用户,简单说就是有多少人登录了后台

我在登录页面Login.aspx,Application["UserNums"] = (int)Application["UserNums"] + 1;
在Global.asax里面

void Application_Start(object sender, EventArgs e)
{
Application["UserNums"] = 0;
}

void Application_End(object sender, EventArgs e)
{
if (Application["UserNums"] != null)
{
Application["UserNums"] = (int)Application["UserNums"] - 1;
}
}

void Application_Error(object sender, EventArgs e)
{
}

void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码

}

void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。

}

在退出的页面Logout.aspx页面,if (Application["UserNums"] != null)
{
Application["UserNums"] = (int)Application["UserNums"] - 1;
}

大概就这样。。。
宝_爸 2009-10-21
  • 打赏
  • 举报
回复
同意 5楼
HTTP协议是种无状态的协议,没法精确统计。
liujintaozyc 2009-10-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pupo 的回复:]
HTTP协议是种无状态的协议,要精确统计不太可能。可以用Session启动、结束、过期来进行判断或者在数据库中建个表保存在线用户,每次访问时刷新该用户最新访问时间,如果在设定的时间内刷新时间过期则将该用户从表中删除,比较简单的做法是在Global.asax文件中写代码


public class Global : System.Web.HttpApplication
    {

        protected void Application_Start(object sender, EventArgs e)
        {
            Application["Count"] = 0;
        }

        protected void Session_Start(object sender, EventArgs e)
        {
            Application["Count"] = (int)Application["Count"] + 1;
        }     

     
        protected void Session_End(object sender, EventArgs e)
        {
            if ((int)Application["Count"] > 0) Application["Count"] = (int)Application["Count"] - 1;
        }

    }
[/Quote]
当有人登录后加一次
lsfv001001 2009-10-21
  • 打赏
  • 举报
回复
恩。全世界网民.每个人都去问下。是不是在上我们网站.就很精确了。
呵呵.开玩笑的。
pupo 2009-10-21
  • 打赏
  • 举报
回复
HTTP协议是种无状态的协议,要精确统计不太可能。可以用Session启动、结束、过期来进行判断或者在数据库中建个表保存在线用户,每次访问时刷新该用户最新访问时间,如果在设定的时间内刷新时间过期则将该用户从表中删除,比较简单的做法是在Global.asax文件中写代码


public class Global : System.Web.HttpApplication
{

protected void Application_Start(object sender, EventArgs e)
{
Application["Count"] = 0;
}

protected void Session_Start(object sender, EventArgs e)
{
Application["Count"] = (int)Application["Count"] + 1;
}


protected void Session_End(object sender, EventArgs e)
{
if ((int)Application["Count"] > 0) Application["Count"] = (int)Application["Count"] - 1;
}

}
Aslangg 2009-10-21
  • 打赏
  • 举报
回复
放在 Application 里 有人登录就+1 退出就-1
rczjp 2009-10-21
  • 打赏
  • 举报
回复
搞错了,是登录的在线人数,不好意思
rczjp 2009-10-21
  • 打赏
  • 举报
回复
精确统计在线人数
cadtian 2009-10-21
  • 打赏
  • 举报
回复
??
ljb07976513524 2009-10-21
  • 打赏
  • 举报
回复
学习
VistaKobe 2009-10-21
  • 打赏
  • 举报
回复
学习
加油馒头 2009-10-21
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 rczjp 的回复:]
引用 12 楼 wuyq11 的回复:
Session退出时实现人数统计不准确。非法关机或关闭IE不会执行
要记录用户日志和操作时间,再用定时器刷新计算用户
已经有固定时间没有活动的用户,然后删除
http://topic.csdn.net/u/20090529/10/35747769-cb13-46f4-927c-6c6bc46d338a.html
请问定时器刷新怎么使用?刷新哪儿呢?或说是刷新哪一些页面呢?
如果经常这样刷新的话是不是会增加服务器的负担呢?
[/Quote]

用JS了刷新客户端,哪些页面自己决定,只要是为了让在线用户 不会随着session到期而消失,导致统计错误

当然会哦
zhgroup 2009-10-21
  • 打赏
  • 举报
回复
精确统计是不可能的,如12楼的方法比较可以,即在用户浏览每一页时都予以记录并更新统计信息,当然这个统计信息(如果访问量不是特别大的话)可以放到缓存中,根据IP确定某个用
加载更多回复(9)

110,546

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧