利用ASP.NET制作网站访问计数器

时间:2022-09-20 12:58:16

利用ASP.NET制作网站访问计数器

摘要:该文通过程序实例,详细介绍了在中实现图形化网站访问计数器的方法。

关键词:ASP. NET;网站;计数器

中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)25-1451-03

Design the Website Access Counter in

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 .

Key words: ; website; counter

1 引言

当我们的动态网站到网上后,怎样得知它的受欢迎程度呢?一个最常用的指标就是网站的访问次数,网站访客计数器就是对网站的访问次数进行统计。因此,实现一个美观大方又有个性的计数器是大多数网站管理员的所求。利用技术来实现网站访问计数器简单方便,其原理也容易被理解,同时计数结果还可以使用漂亮的图片显示在主页上呈现给访问用户。

2 设计构思

计数器的核心工作就是想办法将访问的次数记录下来,并且能够方便的读出数据记录。利用技术实现网站访问计数器,其基本思路如下:当用户从客户端访问网站时,通过读取服务器硬盘上相应的计数文件,并对计数器文件的数据进行加1操作,把当前的计数值在客户端进行显示,然后写回该计数文件。

在此应用中,要建立三个文件,一个Default.aspx,主要用于显示访问次数,一个count.txt文件用于存储访问次数。还有Global.asax,这个文件是核心文件,主要负责响应事件和读写文件。下面注重分析Global.asax文件。

2.1 Global.asax文件

Global.asax文件也称为应用程序文件,它一般被放在应用程序根目录下。此文件中的代码不产生用户界面,也不响应单个页面的请求。它主要是负责处理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 网站访客计数器的具体实现方法

在中实现网站访问计数器。需要解决的关键问题是使用什么样的变量充当计数变量,变量的累加操作在什么事件中进行,以及计数结果如何以图形化的方式显示。下面结合一个具体的网站访问计数器实例详细说明。

3.1 创建文本文件,保存访客次数

任何变量都有生命周期,当Web服务器重启时,计数变量将重新初始化。因此需要建立文本文件count.txt将计数的结果保存下来。

count.txt文件要想被应用程序读写,需要在文件的安全属性中添加aspnet用户,并设置该用户访问count.txt的权限为可写。 具体做法:

打开count.txt的属性页,选择“安全”选项卡,单击“添加”按钮,添加用户,并在权限中选择读取和写入,如图1所示。

3.2 定义计数变量

3.2.1 确定计数变量类型

定义计数变量的关键是要确定变量的类型。通过分析可以得出,用于计数的变量有一个特点,就是所有访问网站的用户都可以读取和修改它。在中,只有 Application变量符合以上特点。

因此,我们声明一个变量Application[“count”]作为计数变量。

3.2.2 计数变量读取count.txt初始化

运用Server.MapPath(“count.txt”)方法得到count.txt文件的路径,运用file类的OpenText方法创建一个StreamReader对象,并将返回的对象赋值给mySR, 然后运用StreamReader类的ReadLine方法读取文件内容,最后,将读到的数值赋给Application["count"]。

3.2.3 将程序代码写入Application_star事件

如果频繁地进行文件的读写,是必要影响程序的运行速度。因此,我们可以将读文件的操作放置在Application_star事件当中。该事件在整个应用程序第一次被触发的事件,也就是说在一个虚拟目录中第一个应用程序执行时触发。之后,在应用程序关闭之前,该事件将不再触发。我们将读文件的操作写入该事件中,在整个应用程序运行其间,该操作只进行一次。

具体代码如下:

protected void Application_Start(Object sender, EventArgs e)

{

int count=0;

StreamReader mySR;

string myFilePath=Server.MapPath ("count.txt");

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、2.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();

string imgName;

Response.Write("您是第");

for( i = 0 ; i

{

imgName = strCounter.Substring(i,1);

Response.Write("");

}

Response.Write("位访问者");

}

3.5 将Application[“count”]中的数值写入count.txt文件

最后,运用StreamWrite类的WriteLine方法将最终的Application["count"]的值写入count.txt文件。该事件代码可放在Application_End事件中。具体代码如下:

protected void Application_End(Object sender, EventArgs e)

{

int count=0;

count=(int)Application["count"];

//将数据记录写入文件

string myFilePath=Server.MapPath ("count.txt");

StreamWriter mySW=new StreamWriter(myFilePath,false);

mySW.WriteLine(count);

mySW.Close ();}

3.6 运行结果

计数器制作完毕后,通过浏览器调用可以得到如图2所示的结果。

图2

4 结束语

以上程序使用VC#编写,在 2005环境下调试通过,希望能给对编程有兴趣的朋友一些启发。

参考文献:

[1] 王华章. 2.0网络系统开发使用教程[M].北京:中国铁道出版社,2006.

上一篇:一个基于Web Service的数据交换系统的设计 下一篇:基于计算机仿真技术的电子技术教学方法探索