您的位置:首页精文荟萃软件资讯 → ASP讲座之三:Application对象与Session对象

ASP讲座之三:Application对象与Session对象

时间:2004/10/7 19:17:00来源:本站整理作者:蓝点我要评论(0)

上一讲中,我们学习了Request对象的Form数据集合、QueryString数据集合和ServerVariables数据集合。在继续下面的学习之前,建议你先轻松一下,因为接下来要介绍的Application对象相对比较抽象,刚开始理解起来恐怕会不辨东西。切记:当你找不到北时,便不要过多考虑Application对象到底是什么东西?还是一句老话,先学会使用它。



一、了解Application对象。为了提神,我们先看一个计数器的例程(你应该运行它以便于理解):

先编辑一个wuf16.htm文件:





记录某个页面的点击数示例:wuf17.asp





wuf17.asp的代码如下:

<% @ LANGUAGE = VBScript %>

<% 'wuf17.asp - 记录某一页面的访问数(计数器原理)

Option Explicit

Dim CountWeb

CountWeb = Request.ServerVariables("SCRIPT_NAME")

'这样保证每个页面都有一个唯一的变量, 避免混乱

%>



<%

Response.Write CountWeb & "

" & vbcrlf

Application.Lock   '请看讲解

Application(CountWeb) = Application(CountWeb) + 1   '累加器,点击数加1

Application.UnLock

Response.Write "WEB服务器关闭重启前该页的点击总数为: " & Application(CountWeb)

%>



运行这个程序时,对大部分的人来说,只有一台机器,既是Web服务器,又是客户端。那么你只能想象这样一种境况了:你的这两个主页文件放在很远的Web服务器上,而如潮水般的国内外用户正通过浏览器访问它们。每个用户点击一次,Application(CountWeb) 的值就加1,而且只要存放文件wuf17.asp的服务器没有关闭,Application(CountWeb)就将一直累加下去。但是注意,如果服务器关闭后重启,则Application(CountWeb)将重新从0开始计数(我晕,我说我的页面访问数怎么老是一位数)。为了避免这种永远从零开始的计数情况,你必须要在服务器关闭之前将Application(CountWeb)的值保存起来,下次需要时再取出来,就能够顺序累计下去了,具体如何做,且听N回后分解。

接下来的问题,就是Application.Lock、UnLock是什么意思?刚才我们做了一个假设,大量的用户正在访问该页面,而每一个用户的点击都会发生Application(CountWeb)加1,想想看,这样不就乱套了(什么!想不出,那肯定是你的主页终日只有你一个人赞助),所以得有个先来后到的规则。当某一用户访问该页面,需要修改Application(CountWeb)的值时,使用Lock方法加锁,避免其他用户修改,修改完后,再解锁。

从上例中您是否已看出,Application对象提供给所有用户共享信息(Application(CountWeb)),它所面向的是所有用户(每个用户的访问都会导致计数器加1)。Application对象还有两个事件,Application_OnStart事件和Application_OnEnd事件(您可千万别晕,这只是面向对象编程语言中起步的概念),使用时语法如下:



下面通过一个实例来说明如何使用事件,该程序的作用是统计站点所有页面的总点击数。

文件wuf18.asp的代码(站点内其他页面文件与这个文件类似):

<% @ LANGUAGE = VBScript %>

<% Option Explicit

‘站内所有页面文件都应包括这句%>





服务器关闭重启之前站点所有页面总点击数: <%= Application("CountAll") %>



文件wuf19.asp的代码:

<% ' wuf19.asp

Application.Lock

Application("CountAll") = Application("CountAll") + 1

Application.UnLock

%>

文件wuf18.asp与wuf19.asp放在同一目录下。文件global.asa的代码:

    注意:事件处理程序必须以名为“global.asa”的文本文件存盘,而且必须放在虚拟路径的根目录下(一般就是与index.htm或default.htm文件放在同一目录下,例如:以我的机器为例,就绝对路径而言,global.asa放在c:\InetPub\home下,而wuf18.asp和wuf19.asp放在c:\InetPub\home\asp下),同一虚拟路径只允许有一个global.asa文件存在。



浏览wuf18.asp查看运行结果。看来,仅仅学会使用Application对象并不难。



二、认识Session对象。有了前面的Application对象做铺垫,Session对象就容易多了。它与Application对象类似,只不过是仅仅用来记录单个用户的相关信息,它面向单个用户,因此我们可以使用Session对象存储某单个用户的信息。

与Application对象一样,Session对象也有两个事件:Session_OnStart事件和Session_OnEnd事件。使用语法与Application对象类似。

值得一提的是,使用Session对象前,必须确认浏览器的Cookie功能已启用(默认设置就可以了)。

下面举一个实例,文件global.asa的要求同上,因此上例中的global.asa将被本例中的global.asa覆盖。



文件wuf20.asp:

<%@ Language=VBScript %>





<% 'wuf20.asp

Response.Write "默认Timeout设置:" & Session.Timeout & "分钟
"

Session.Timeout = 1

Response.Write "您进入本站的时间:" & Session("In") & "
"

Response.Write "请在 1 分钟后刷新本页" & "

"



if Not IsEmpty(Application("Out")) then

  Response.Write "您上次进入本站的时间:" & Application("In") & "
"

  Response.Write "您上次离开本站的时间:" & Application("Out") & "
"

  Response.Write "浏览时间(分钟):" &_

             Datediff("n",Application("In"),Application("Out")) & "

"

End If



if IsEmpty(Session("Out")) then

  Response.Write "刷新前和刷新后Session(""Out"")的值都为空" & "
"

End If

%>





    当用户第一次浏览网页时,发生Session_OnStart事件,程序记录用户本次进入网页的时间,而此时不会发生Session_OnEnd事件,故Application("Out")值为空,程序不会显示浏览时间。

    我们知道,Application对象的生存期为第一个用户浏览网页直至服务器关闭。而Session对象的生存期为用户第一次浏览网页(会话开始)直至会话结束。那什么时候会话结束呢?具体到本例中,Session.Timeout = 1设置会话超时为1分钟,即如果长达1分钟没有向Web服务器提供请求,则会话超时,导致会话结束,发生Session_OnEnd事件,程序执行Session_OnEnd内的代码。在这里我们将进入和离开时间分别放入Application("In")和Application("Out"),因为会话结束后,Session对象将不复存在,这点我们在代码的最后做了验证。

从这个例程,可以看出:

1.  Application对象和Session对象的生存期不同。

2.  Session对象是针对单个用户的,它的值存放在客户端,其他用户的浏览对该单用户的Session对象没有任何影响。单个用户只能读写自己Session对象的值(如:Session("In"))。

3.  注意在Response.Write中显示双引号的表示方法:(""Out"")。

4.  特别提醒:该程序没有实用性,仅供调试用(仅适用于只有一个用户浏览的情况),请思考这是为什么?答案见本文末。

提示:请注意Application对象的特性。



三、一个经典的实例:如何在网页上显示在线人数

在下面的例子中,用Application("Online")来存放在线人数,用Application("CountAll")存放总访问人数。

原理:当一个新用户浏览网页时,发生Session_OnStart事件,在线人数加1,访问用户数也加1。当某用户离开时,会话超时后会发生Session_OnEnd事件,在线人数减1。

Global.asa代码如下:



Wuf21.asp代码如下:

<%@ Language=VBScript %>





<%Session.Timeout = 5%>

在线人数: <%= Application("Online")%>



访问总人数: <%= Application("CountAll")%>







    请注意将本例程与wuf17.asp对比,后者是计算点击数,而前者是计算访问人数。



答案:由于Applicaton对象适用于所有用户,所以在多用户的情况下,其他用户的浏览也会改变Application(“In”)和Application(“Out”)的值。


相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3

最新文章 微信3.6.0测试版更新了微信支付漏洞会造成哪 360快剪辑怎么使用 360快剪辑软件使用方法介酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗

人气排行 xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载EDiary——一款好用的电子日记本