首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

* 11.3  Application对象的状态管理

在 ASP.NET 程序中可以使用 Application 和 Session 对象建立变量,可以称其为 Application 和 Session 变量,它们可以用来存储用户状态信息的共享数据。

11.3.1  Application对象基础

Application 和 Session 对象的目的是为了保留用户状态,以便 ASP.NET 程序能够顺利执行,其差异只是保留变量的范围不同。

1. 什么是Application对象

Application 对象可以建立 Application 变量,它和一般程序变量不同,Application 变量是一个 Contents 集合对象,此变量可以为访问网站的每位用户提供一个共享数据的通道,因为 Application 变量允许网站的每位用户获取或更改其值。

Application 对象是在第 1 个 Session 对象建立后建立,Application 对象的范围直到 Web 服务器关机或所有的用户都离线后才会删除。

2. Application变量的使用

不论网站中有多少位用户同时浏览网站(不是指登录网站的用户),在服务器端内存只保留一份 Application 变量,其变量格式如下。

Application("HitCounter")= 1234

上述程序代码将名为Hit_Counter的Application 变量设为 1234,此变量和 ASP.NET 程序变量不一样,它是获取 Contents 集合对象的元素,变量名称是字符串。Application 对象是 System.Web 名称空间的 HttpApplicationState 类,其常用属性如表11-4所示。

表11-4  Application对象的常用属性

属    性

说    明

 Contents

获取 HttpApplicationState 对象,此属性是为了和旧版 ASP 兼容

 Count

获取共有多少个 Application 变量,也就是 HttpApplicationState 集合对象的对象数

 Item

使用变量名称或索引值获取 Application 变量值

3. Application状态管理的同步

ASP.NET 应用程序的每位用户都可以存取 Application 变量,用户可以同时读取 Application 变量,但是如果有一位更改数据,其他用户读取数据时,就会发生数据冲突情况,为了避免这情况发生,需要考虑同步问题。

在 Application对象中提供Lock()和Unlock()方法,可以保障在同一时间内只允许一位用户存取 Application 变量,其程序代码如下所示。

Application.Lock()

Application("HitCounter")=Application("HitCounter")+1

Application.Unlock()

上述程序代码在更改变量前执行 Lock()方法避免其他用户存取此变量,如果读取就不需要 Lock()方法。在更改后,此例是将 Application 变量 Hit_Counter 值加 1 后,即可使用 Unlock()方法,以便让其他用户更改此变量。Application 对象的常用方法如表11-5所示。

表11-5  Application对象的常用方法

方    法

说    明

Lock()

禁止其他用户修改 Application 变量

Unlock()

允许其他用户修改 Application 变量

在实际操作中,Application 变量可以记录登录网站的用户,或网站已经登录的用户总数,至于每位用户状态则使用 Session 变量记录。

11.3.2  网站的访客计数

网站的访客计数是一种必备组件,其目的是显示有多少位访客曾经浏览网站,显示信息可以从开站以来的访客数,或一段时间内的访客数。

ASP.NET 的访客计数是在 Global.asax 文件的 Session_Start()事件处理程序中,使用 Application 变量记录访客计数,如下所示。

Application("HitCounter")=Application("HitCounter")+1

上述Application变量记录目前的访客计数,别忘了使用Lock()和Unlock()方法。

1. ASP.NET程序:Global.asax

在ASP.NET程序中实现网站访客计数的功能,使用Application对象的Lock()和Unlock()方法来创建访客计数,如下所示。

01: <%@ Application Language="VB" %>

02: <script Runat="server">

03: Sub Application_Start(ByVal Sender As Object,_

04:                     ByVal E As EventArgs)

05:    ' 初始访客计数的Application变量

06:    Application("HitCounter")=  1234

07: End Sub

08: Sub Session_Start(ByVal Sender As Object,_

09:                     ByVal E As EventArgs)

10:    Application.Lock()

11:    ' 创建访客计数

12:    Application("HitCounter")=Application("HitCounter")+1

13:    Application.Unlock()

14: End Sub

15: </script>

2. 程序说明

在Application_Start()事件处理程序中初始化访客计数,第6行初始化 Application变量值,Session_Start()处理程序在第12行将访客计数加1。

3. ASP.NET程序:Ch11-3-2.aspx

在ASP.NET程序中获取Application变量后,使用Label控件显示<img>标记的图形访客计数,如下所示。

01: <%@ Page Language="VB" %>

02: <script Runat="server">

03: Sub Page_Load(Sender As Object,E As EventArgs)

04:    Dim str As String = "网站第 "

05:    Dim i,counter,maxDigit,digit As Integer

06:    maxDigit = 5

07:    counter = Application("HitCounter")

08:    For i =(maxDigit-1)To 0 Step -1

09:      digit = counter \(10 ^ i)

10:      str &="<img src=""Ch11-3-2BinaryWrite.aspx?Digit=" _

11:          & digit & """>"

12:      counter = counter MOD(10 ^ i)

13:    Next

14:    str &= "位访客<br>"

15:    show.Text = str

16: End Sub

17: </script>

18: <html>

19: <head><title>Ch12-3-2.aspx</title></head>

20: <body>

21: <center><font color="red">

22: <form Runat="server">

23: <asp:Label Id="show" Runat="server"/>

24: </form>

25: </font></center>

26: </body>

27: </html>

4. 程序说明

第 7 行获取 Application 变量 HitCounter的值,第 8~13 行的循环建立访客计数值。

5. 网页预览

将Ch11\Ch11-3-2文件夹建立成虚拟目录后,启动浏览程序执行 Ch11-3-2.aspx 程序,可以显示图形的访客计数,如图11-6所示。

图11-6  Ch11-3-2.aspx运行结果

上图显示访客计数是1235位,重复启动浏览程序加载ASP.NET程序,可以看到访客计数增加,即增加Application变量HitCounter的值。

在ASP.NET程序中显示的数字图片是执行ASP.NET程序 Ch11-3-2BinaryWrite.aspx,即使用第 4 章的 BinaryWrite()方法来输出图片。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论