精确统计在线人数100分 如果是Session的话会出现超时等情况,这样计算就不精确了使用Global.asax的方法是什么,在网上也有自己写方法的,一般最好是怎么做呢?有什么最简单却最好的方法呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 放在 Application 里 有人登录就+1 退出就-1 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; } } 同意 5楼HTTP协议是种无状态的协议,没法精确统计。 现在我的写法是这样的,看有什么需要修改的 因为我是统计登录的在线用户,简单说就是有多少人登录了后台我在登录页面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; }大概就这样 嗯 不能精确统计和HTTP协议是种无状态的协议有什么关系,请指教另外如果用Session的话,经常一会就超时了,怎么解决呢? Session退出时实现人数统计不准确。非法关机或关闭IE不会执行 要记录用户日志和操作时间,再用定时器刷新计算用户 已经有固定时间没有活动的用户,然后删除 http://topic.csdn.net/u/20090529/10/35747769-cb13-46f4-927c-6c6bc46d338a.html 通过ajax异步提交(定时),统计在线人数。 要达到精确,估计无解,也没什么意思一般就是判断SESSION了 顶..用application 只是实时没你要求的精确.但足够了 用JS了刷新客户端,哪些页面自己决定,只要是为了让在线用户 不会随着session到期而消失,导致统计错误当然会哦 调用动态库出错 关于DataGridView中双击一个单元格后弹出对应的一个数据库窗口 dataGridView DataTable.Select(string)的问题 在命令提示工具里怎没进入网站目录 一个挑战自我的问题,很多高手都没搞定。DataGridView如何能够让某列可以查寻数据后再输入 如何通过对类的序列化实现WCF的远程接口调用? 聊个MVC的话题 web api有用吗 怎么禁止DataGridView的自动排序功能? 弱弱急急的一问!!(高手帮忙!!!) 做完之后的程序 里面新建子项工程 怎么实现他们的导出导入 数据序列化-感觉有些复杂特来讨教
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;
} }
HTTP协议是种无状态的协议,没法精确统计。
因为我是统计登录的在线用户,简单说就是有多少人登录了后台我在登录页面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;
}大概就这样
另外如果用Session的话,经常一会就超时了,怎么解决呢?
要记录用户日志和操作时间,再用定时器刷新计算用户
已经有固定时间没有活动的用户,然后删除
http://topic.csdn.net/u/20090529/10/35747769-cb13-46f4-927c-6c6bc46d338a.html
一般就是判断SESSION了
用application 只是实时没你要求的精确.但足够了
用JS了刷新客户端,哪些页面自己决定,只要是为了让在线用户 不会随着session到期而消失,导致统计错误当然会哦