利用ASP.NET制作网站访问计数器
作者:刘笑迎 张 辉
来源:《电脑知识与技术·学术交流》2008年第25期
作者:刘笑迎 张 辉
来源:《电脑知识与技术·学术交流》2008年第25期
摘要:该文通过程序实例,详细介绍了在ASP.NET中实现图形化网站访问计数器的方法。
关键词:ASP. NET;网站;计数器
中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)25-1451-03
Design the Website Access Counter in ASP.NET
LIU Xiao-ying, ZHANG Hui
(Department of Information Engineering, Yellow River Conservancy Technical Institute, Kaifeng 475003, China)
Abstracts: Analyzing many examples of program, the paper introduces the methods how
to design the website visitor(access) counter of graphics in ASP.NET.
Key words: ASP.NET; website; counter
1 引言
当我们的动态网站发布到网上后,怎样得知它的受欢迎程度呢?一个最常用的指标就是网站的访问次数,网站访客计数器就是对网站的访问次数进行统计。因此,实现一个美观大方又有个性的计数器是大多数网站管理员的所求。利用ASP.NET技术来实现网站访问计数器简单方便,其原理也容易被理解,同时计数结果还可以使用漂亮的图片显示在主页上呈现给访问用户。
2 设计构思
计数器的核心工作就是想办法将访问的次数记录下来,并且能够方便的读出数据记录。利用ASP.NET技术实现网站访问计数器,其基本思路如下:当用户从客户端访问网站时,通过读取服务器硬盘上相应的计数文件,并对计数器文件的数据进行加1操作,把当前的计数值在客户端进行显示,然后写回该计数文件。
在此应用中,要建立三个文件,一个Default.aspx,主要用于显示访问次数,一个文件用于存储访问次数。还有Global.asax,这个文件是核心文件,主要负责响应事件和读写文件。下面注重分析Global.asax文件。
2.1 Global.asax文件
Global.asax文件也称为ASP.NET应用程序文件,它一般被放在应用程序根目录下。此文件中的代码不产生用户界面,也不响应单个页面的请求。它主要是负责处理Application_Start,Application_End,Session_Start和Session_End等事件。
2.2 Application对象及其事件
Application 对象来自HttpApplictionStat 类。它可以在多个请求、连接之间共享公用信息,也可以在各个请求连接之间充当信息传递的管道。此对象的生命周期起于IIS开始运行并且有人开始连接时,终止于IIS关闭或者若干时间内无人连接(默认为20分钟)。当Application 对象的生命周期开始时,Application_Start 事件会被启动,当Application对象的生命周期结束时Application_End 事件会被启动。
2.3 Session对象及其事件
Session对象有着与Application类似的事件:Session_Start和Session_End事件。当有一个新用户访问应用程序时,就会立刻触发Session_Start事件。当某个用户停止了访问或者程序执行了Session.Abandon方法,就会触发Session_End事件。
3 网站访客计数器的具体实现方法
在asp中实现网站访问计数器。需要解决的关键问题是使用什么样的变量充当计数变量,变量的累加操作在什么事件中进行,以及计数结果如何以图形化的方式显示。下面结合一个具体的网站访问计数器实例详细说明。
3.1 创建文本文件,保存访客次数
任何变量都有生命周期,当Web服务器重启时,计数变量将重新初始化。因此需要建立文本文件将计数的结果保存下来。
文件要想被asp应用程序读写,需要在文件的安全属性中添加aspnet用户,并设置该用户访问的权限为可写。 具体做法:
打开的属性页,选择“安全”选项卡,单击“添加”按钮,添加asp用户,并在权限中选择读取和写入,如图1所示。
3.2 定义计数变量
3.2.1 确定计数变量类型
定义计数变量的关键是要确定变量的类型。通过分析可以得出,用于计数的变量有一个特点,就是所有访问网站的用户都可以读取和修改它。在Asp中,只有 Application变量符合以上特点。
因此,我们声明一个变量Application[“count”]作为计数变量。
3.2.2 计数变量读取初始化
运用Server.MapPath(“”)session数据错误是什么意思方法得到文件的路径,运用file类的OpenText方法创建一个StreamReader对象,并将返回的对象赋值给mySR, 然后运用StreamReader类
的ReadLine方法读取文件内容,最后,将读到的数值赋给Application["count"]。
3.2.3 将程序代码写入Application_star事件
如果频繁地进行文件的读写,是必要影响程序的运行速度。因此,我们可以将读文件的操作放置在Application_star事件当中。该事件在整个ASP.NET应用程序第一次被触发的事件,也就是说在一个虚拟目录中第一个ASP.NET应用程序执行时触发。之后,在应用程序关闭之前,该事件将不再触发。我们将读文件的操作写入该事件中,在整个应用程序运行其间,该操作只进行一次。
具体代码如下:
protected void Application_Start(Object sender, EventArgs e)
{
int count=0;
StreamReader mySR;
string myFilePath=Server.MapPath ("");
mySR=File.OpenText (myFilePath);
while(mySR.Peek ()!=-1)
{
string str=mySR.ReadLine ();
count=Int32.Parse (str);
}
Application["count"]=count;
mySR.Close ();
}
3.3 当每一个用户访问网站内的网页时,计数变量累加
由于application[“count”] 变量是所有用户共享的,为了避免修改时出现争用、死锁或访问冲突,在对Application变量进行修改时,必须先将其锁定,修改完之后进行解锁。
下面关键是要确定计数变量累加的代码写在什么事件中。
当每个用户从客户端浏览器中首次与网站建立连接时(首次访问网站中的任意一个网页),他就与这个服务器建立了一个Session(会话),服务器会为其创建一个Session对象。同时触发Session_Start事件。
Session对象有一个有效期,默认为20分钟。有时候使用者正在浏览网页时,突然去做其他的事情而没有把网页关闭;如果 服务器一直浪费资源在管理这些Session 上,那么势必会让服务器的效率降低。所以当使用者超过一段时间没有动作时,我们就可以将Session释放。这个时间就是Session的有效期。
此后,只要用户在同一浏览器中访问网站中任意网页,或者在Session有效期内刷新网页时,该事件不再触发。我们将累加代码写在Session_star事件中,将能够实现:
1) 访客首次浏览网站中的任意一个网页时计数器加1,默认时间内访问其他网页或者刷新页面,计数器将不会累加。
2) 访客超过默认时间后再次访问网站或者刷新网页,访问人数将加一。
本步骤的具体代码如下:
protected void Session_Start(Object sender, EventArgs e)
{
Application.Lock ();--加锁
count=(int)Application["count"];
count=count+1;
object obj=count;
Application["count"]=obj;
Application.unlock();--解锁
}
3.4 以图形模式显示访客数值
我们需要将访客数值显示在页面上,为了增加网页的趣味性,可以用图片显示数字。为此,首先要准备0-9的GIF图形文件:0.gif、1.gif、9.gif,分别用来显示10个数字,然后利用循环,一一取出计数变量中的数字字符,再将字符映射到GIF图形文件,使用Response对象的Write方法,将其显示在网页上。程序代码放在Default.aspx程序中的Page_Load事件中。
protected void Page_Load(object sender, System.EventArgs e)
{
int i;
string strCounter=Application[“count”].ToString();
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论