当前位置: 首页 > 编程日记 > 正文

ASP.NET中在线用户统计

天极论坛

统计在线用户的作用不言而喻,就是为了网站管理者可以知道当前用户的多少,然后根据用户数量来观察服务器或者程序的性能,从而可以直观的了解到网站的吸引力或者网站程序的效率。现在,我们就介绍一个简单明了的方法来统计在线用户的多少,该方法的特点就是充分的利用了ASP.NET的特点,结合global.asax文件,用Application和Session巧妙的实现在线用户的统计,由于程序中只用到一个Application,所以,程序占用系统资源几乎可以忽略不及,当然,这也是网站管理者最关心的问题之一。

  一、用户显示页面的使用

  首先,我们来看看怎样现实当前网站的访问用户数量,程序代码如下:

<%@ Page Language="c#" debug="true" %>
<html>
<head>
<SCRIPT LANGUAGE="c#" RUNAT="server">
private void Page_Load(object sender, System.EventArgs e)
{
Visitors.Text = "本站当前有: <b>" + Application["user_sessions"].ToString() + "" + "</b> 位访问者 !";
}
<title>在线用户</title>
</head>
<body>
<asp:label id="visitors" runat="server" /><br>
</body>
</html>

可以看出,以上的程序特别简单,就是调用Application。当然,我们不必要专门设计一个页面来显示在线用户数量,在网站的任何页面,我们都可以直接调用Application("user_sessions").ToString()来显示当前用户数量。

  二、global.asax文件实现

  global.asax文件的作用我们自不必说,现在,我们直接来看统计当前在线用户数量如何实现:

<script language="c#" runat="Server">
protected void Application_Start(Object sender, EventArgs e)
{
Application["user_sessions"] = 0;
}
protected void Session_Start(Object sender, EventArgs e)
{
Application.Lock();
Application["user_sessions"] = (int)Application["user_sessions"] + 1;
Application.Unlock();
}
protected void Session_End(Object sender, EventArgs e)
{
Application.Lock();
Application["user_sessions"] = (int)Application["user_sessions"] - 1;
Application.Unlock();
}
</script>

以上代码很容易理解,当网站开始服务的时候(Application开始的时候),程序设置Application["user_sessions"]为零,然后,当用户进入网站(Session开始的时候)的时候,锁定Application,然后,将application("user_sessions")加一,用户退出网站的时候,application("user_sessions")减一。这样,就很巧妙的实现了在线用户的统计。

  三、一点讨论

  以上的统计,简明扼要,程序很容易实现。但是,如果我们仔细考虑,发现该方法有一定的局限,统计出来的在线用户数量可能稍微有点误差。因为我们在以上程序中,是根据用户建立和退出会话(Session)来实现在线人数的加减的,而我们知道,如果用户没有关闭浏览器,而进入另外一个网站,那么,这个会话在一定的时间内是不会结束的,这个时间我们可以通过TimeOut来设置,一般的,我们设置为20分钟。所以,在用户数量统计上面,还是存在一点误差的。

  另外,我们知道,在ASP中,如果用户将浏览器上面的Cookies设置为“禁用”,那么,Session就不能再被传递,显然,这样设置让以上的统计程序无能为力。不过,在ASP.NET中我们有解决方法,在config.web文件中,我们将<sessionstate cookieless="false" />设置为true就可以了,也就说,不使用Cookies也可以传递Session。这样,我们的程序就可以在不同的访问者环境中顺利运行。

  四、总结

  以上的统计程序特别简单,但是,细节的东西我们不一定想到,这也是我们在编程中需要多一点考虑的。

相关文章:

数(Number)

--读《自然数原本&#xff1a;数数论》&#xff08;薛海明&#xff0c;山西科学技术出版社&#xff09;和《数论概论》&#xff08;[美]Joseph H.Silverman&#xff0c;机械工业出版社&#xff09;笔记 人们对于数的认识从数数&#xff08;counting&#xff09;开始&#xff0c…

linux 中root用户与普通用户的切换

su是在用户间切换&#xff0c;可以是从普通用户切换到root用户&#xff0c;也可以是从root用户切换到普通用户。 如果当前是root用户&#xff0c;那么切换成普通用户test用以下命令&#xff1a;su test或su - test 如果要切换回root用户或普通用户切换至root用户&#xff0c;用…

2个月做出一款AI项目?这些学生在DeeCamp上决出两个总冠军

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;2个月&#xff0c;一群来自世界各地高校的学生做出了技术与商业化兼具的AI落地项目。8月5日&#xff0c;DeeCamp 2020人工智能训练营迎来总冠军答辩暨结营典礼。最终&#xff0c;自动驾驶赛道和创新赛道的两支团队夺得…

C语言宏定义技巧

C语言宏定义技巧&#xff08;常用宏定义&#xff09; 写好C语言&#xff0c;漂亮的宏定义很重要&#xff0c;使用宏定义可以防止出错&#xff0c;提高可移植性&#xff0c;可读性&#xff0c;方便性等等。下面列举一些成熟软件中常用得宏定义。 1、防止一个头文件被重复包含 …

了解C++默默编写并调用哪些函数

在C中&#xff0c;如果你写下 1 classEmpty{…}; 就相当于写下1 classEmpty{ 2 public: 3 Empty();//default构造函数 4 Empty(constEmpty& rhs){……};//copy构造函数 5 ~Empty(){…}//析构函数 6 Empty&operator(constEmpty& rhs){…};//copy赋值运算符 7 }; 惟有…

仅50张图片训练数据的AI分类技术PK​,阿里拿下ECCV 2020竞赛冠军

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;近日&#xff0c;两年一度的世界计算机视觉领域顶会ECCV 2020的各项挑战赛结果出炉&#xff0c;在图像分类赛中&#xff0c;阿里安全的高效AI分类技术超越三星、深兰科技、同济大学等国内外多支队伍的同类技术获得冠军…

Eclipse生成jar文件

2019独角兽企业重金招聘Python工程师标准>>> 具体做法如下&#xff1a; 方法一&#xff1a;(工程没有引用外部jar包时&#xff0c;直接导出) 选中工程---->右键&#xff0c;Export...--->Java--->JAR file--->next-->选择jar file的路径及名称-->…

动态的管理ASP.NET DataGrid数据列

动网先锋 在ASP.NET的DataGrid数据显示控件编程中&#xff0c;我们有几种方式可以增加DataGrid columns。其中最常见的方法是在web forms设计器中增加&#xff0c;通过在控件工具箱中拖访DataGrid控件到web设计页面&#xff0c;然后在属性生成器中增加Columns列;还有一种方式就…

Django模型层Meta内部类详解

Django 模型类的Meta是一个内部类&#xff0c;它用于定义一些Django模型类的行为特性。以下对此作一总结&#xff1a; abstract这个属性是定义当前的模型类是不是一个抽象类。所谓抽象类是不会对应数据库表的。一般我们用它来归纳一些公共属性字段&#xff0c;然后继承它的子类…

ASP.NET虚拟主机的重大安全隐患

作者&#xff1a;秦海鹏 来自&#xff1a; yesky 说明&#xff1a;本文中所有程序均在Windows 2000 Server中文版 SP2上编译运行无误开发环境&#xff1a;.Net 框架1.0 Version 1.0.3705 一、ASP.NET虚拟主机存在的重大隐患 我曾经在WWW.BRINKSTER.COM申请了一个免费的…

给力!一行代码躺赚普通程序员10年薪资!

笔者这两天闲逛知乎&#xff0c;看到了这个帖子&#xff1a;匿名答题&#xff0c;发表于2014年&#xff0c;此外没有留下任何多余信息。2年躺赚200万&#xff0c;相当于普通程序员10年的工资。没想到Pyhon这么强大&#xff0c;怪不得有人说“除了不会生孩子&#xff0c;Python什…

Hello world!

2019独角兽企业重金招聘Python工程师标准>>> 向世界打招呼&#xff0c;大家好&#xff0c;这是我的第一篇文章&#xff0c;我准备在这里开博&#xff01; 转载于:https://my.oschina.net/chinesedragon/blog/57259

在VMware Workstation上安装Ubuntu 16.04 Server操作系统

Ubuntu 16.04 Server的下载 http://www.ubuntu.org.cn/download/server 按空格键&#xff08;Space&#xff09;选中第一个ssh服务 成功&#xff01;

ASP.NET中WebForm组件CheckBoxList编程

作者&#xff1a;马金虎 来自&#xff1a;yesky CheckBox选择组件是一个程序中都经常的组件。在程序设计中使用到该组件&#xff0c;一般都不会只使用到一个&#xff0c;往往是以多个此类组件的形式出现的。在ASP.NET页面中如果要使用到多个CheckBox组件&#xff0c;除了添加…

今晚 8 点直播 | OpenCV 20 年,首款开源软硬一体的 OAK 套件来了!

从 2000 年首个开源 OpenCV Alpha 版本&#xff0c;到不久前刚刚发布的 OpenCV 4.4&#xff0c;跨平台计算机视觉库 OpenCV 在不知不觉间已经走过了 20 个年头。相信不少 IT、AI 的从业者几乎都使用过。据 CSDN 发布的《中国AI应用开发者报告2020》显示&#xff0c;作为计算机视…

Linux常用压缩解压命令

1.tar基本用法&#xff1a;1.打包文件&#xff1a;tar -cvf ~/test.tar ~/test 2.打包并压缩文件&#xff1a;tar -zcvf ~/test.tar.gz ~/test2.解包文件&#xff1a;先切换到要解包到的目录&#xff0c;然后执行&#xff1a;tar -xvf ~/test.tar参数详解&#xff1a;-c, --cre…

第二课 , 启动 ./start-all.sh

2019独角兽企业重金招聘Python工程师标准>>> 一.安装环境 1.保持第一课的基础 2.关闭防火墙 ,node1,node2,node3 service iptables stop 3.修改conf/mapred-site.xml <configuration><property><name>mapred.job.tracker</name><value&…

ASP.NET的WebFrom组件LinkButton编程

作者&#xff1a;阿虎 来自&#xff1a;yesky 在ASP.NET的WebForm组件中的LinkButton组件也是一个服务器端的组件&#xff0c;这个组件有点类似于HTML中的&#xff1c;A&#xff1e;标识符。它的主要作用是就是在ASP.NET页面中显示一个超链接。当这个链接被按动的时候&#x…

Python再夺冠,上古语言COBOL大流行,IEEE Spectrum 2020年度编程语言排行榜出炉!...

整理 | 屠敏题图 | 东方 IC出品 | CSDN 博客领域驱动技术&#xff0c;技术鞭策领域。近日&#xff0c;IEEE Spectrum 最新发布了 2020 年年度编程语言排行榜。IEEE Spectrum 编程语言排行榜一年发布一次&#xff0c;截止到今年&#xff0c;该排行榜已经连续发布了七年。与其他榜…

NSStream线程阻塞处理

http://www.10bay.com/?p149 [[session inputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 因主线程有事务要处理&#xff0c;会阻塞主线程外设事件的触发&#xff1b; 解决&#xff1a; “将socket的runloopsource添加到新开的…

Python笔记

精简&#xff0c;快速&#xff0c;并持续完善。输入与输出 >>> print(Name: %s, score: %d % (Jack, 89)) Name: Jack, score: 89>>> print(Hello, world!) #逗号连接 Hello world!a raw_input("a:") #捕获原始输入&#xff0c;返回字符串 b …

资料验证的asp.net程序

<!-------资料验证&#xff1a;天乐comezxnsina.com------------> <!-------比较简单&#xff0c;以前写的&#xff0c;若有纰漏&#xff0c;请跟我联系----------> <Html> <Body bgcolor"White"> <H3>Validator(资料验证)控制元件<…

iphone UIView的一些基本方法理解

原文链接地址&#xff1a;http://www.cocoachina.com/bbs/read.php?tid38766UIView的一些基本方法理解UIView的一些基本方法理解&#xff1a;loadView、viewDidLoad、viewDidUnload、viewWillAppear、viewWillDisappear经常使用UIView以及它的子类&#xff0c;一般对于init:&a…

收藏!美国博士明确给出Python的高效学习技巧

我见过市面上很多的 Python 讲解教程和书籍&#xff0c;他们大都这样讲 Python 的&#xff1a;先从 Python 的发展历史开始&#xff0c;介绍 Python 的基本语法规则&#xff0c;Python 的 list, dict, tuple 等数据结构&#xff0c;然后再介绍字符串处理和正则表达式&#xff0…

pl/sql中三种游标循环效率对比

pl/sql中三种游标循环效率对比 - Oracle数据库栏目 - 红黑联盟 http://www.2cto.com/database/201307/224636.html转载于:https://blog.51cto.com/yweaner/1873294

UpdateData函数(转)

UpdateData&#xff0c;顾名思义&#xff0c;是用来刷新数据的。 UpdateData(TRUE) -- 刷新控件的值到对应的变量 UpdateData(FALSE) -- 拷贝变量值到控件显示例如&#xff0c;窗口中用 DDX_Text(pDX, IDC_EDIT1, m_usercode); 将IDC_EDIT1编辑框控件与m_usercode变量做了关联&…

PEAR, PECL和Perl的区别

PEAR是PHP扩展与应用库&#xff08;the PHP Extension and Application Repository&#xff09;的缩写。它是一个PHP扩展及应用的一个代码仓库&#xff0c;简单地说&#xff0c;PEAR就是PHP的CPAN。 PECL &#xff08;PHP Extension Community Library&#xff09;&#xff0c;…

永远不要对 AI 说:“我不行!”

最近这些年&#xff0c;如果我要问什么技术最值钱&#xff0c;我想超过90%的人都会说是&#xff1a;人工智能。确实&#xff0c;随着近些年人工智能发展与普及&#xff0c;AI研发岗早已成为编程领域薪水最高的岗位之一。但扎心的是&#xff0c;一提到 AI &#xff0c;相信绝大部…

ThoughtWorks雷达上的新奇变化

与往常一样&#xff0c;ThoughtWorks技术雷达涵盖了四方面内容&#xff1a;语言与框架、平台、技术和工具&#xff0c;而且其中每个领域都会有四方面内容&#xff1a;采用、试用、评估及保留。本文列举了相关领域中较新和值得注意的内容。\\语言与框架\\采用: Ember.js由于其生…

用于时序动作提名生成任务,爱奇艺提出BC-GNN图神经网络 | ECCV 2020

时序动作提名生成任务可以从未处理的长视频中定位出包含动作内容的片段&#xff0c;对视频理解以及时序行为检测任务等有着重要的作用。随着视频数量的激增以及视频内容的丰富&#xff0c;对时序动作提名算法的关注和需求也得到巨大提升。然而目前的方法多采用先生成起止边界&a…