ASP.NET中的状态管理

Session 会话

l         区分客户端,不区分页面

l         数据量会随着客户端(并发)数量的增多,而增多

l         服务器端存储什么:数据存储在服务器端(InProc,StateServer,SqlServer)

l         客户端存储什么:客户端存储的是SessionID

l         有过期策略

l         适用场合:与用户相关的数据,购物车,用户帐号,

Application状态

l         全局数据,所有客户端共享:不区分客户端,不区分页面

l         服务器端存储什么:数据存储在服务器端(服务器进程内)

l         客户端存储什么:客户端不存储任何与Application状态数据

l         可能有多线程并发访问的问题,需要同步(Lock/Unlock)

l         适用场合:全局性的数据,在Application_Start内初始化,然后在其他页面中访问

ViewState视图状态

l         区分客户端,区分页面

l         服务器端存储什么:数据在服务器和客户端(页面数据)来回穿梭

l         客户端存储什么:数据在服务器和客户端(页面数据)来回穿梭

l         适用场合:单一页面上的临时性数据,用于用户和一个页面之间的来回交互。

l         安全性比较低

页面上的实例字段

l         区分客户端,区分页面,而且区分前后不同的请求

l         生存期极短,只在服务器处理页面的过程中有效

l         适用场合范围较窄

静态字段

l         全局数据,所有客户端共享:不区分客户端,不区分页面

l         服务器端存储什么:数据存储在服务器端(服务器进程内)

l         客户端存储什么:客户端不存储任何static状态数据

l         可能有多线程并发访问的问题,同步需要自己编写代码(不如Application方便

l         适用场合:全局性的数据,在任何需要的地方内初始化,然后在其他页面中访问

查询字符串 Query String

l         区分客户端,在两个相邻的页面之间共享(通过地址栏上数据)

l         服务器端存储什么:数据在服务器和客户端浏览器地址栏中交互

l         客户端存储什么:数据在服务器和客户端浏览器地址栏中交互

l         适用场合:作为数据查询的分离关键字,支持copy或存储。丧失安全性; 异构网站系统(JSP, ASP, PHP)ASP.NET页面集成

Input

l         区分客户端,在两个相邻的页面之间共享(通过地址栏上数据)

l         服务器端存储什么:数据从客户端页面上post给服务器

l         客户端存储什么:数据从客户端页面上post给服务器

l         适用场合:异构网站系统(JSP, ASP, PHP)ASP.NET页面集成

 

 

ASP.NET中的状态管理(1)

  Web表格网页是基于HTTP的,它们没有状态,这意味着它们不知道所有的请求是否来自同一台客户端计算机,网页是否受到了破坏,以及是否得到了刷新,这样就可能造成信息的丢失。于是,状态管理就成了开发互联网应用程序中的一个实实在在的问题。

我们在ASP中能够通过cookie、查询字符串、应用程序、对话等轻易地解决这些问题。现在到了ASP.NET环境中,我们仍然可以使用这些功能,只是它们的种类更多了,功能也更强大了。

管理互联网网页主要有二种不同的方法:客户端和服务器端。

1、客户端的状态管理:

在客户端、服务器之间的多次请求-应答期间,服务器上不保存信息,信息将被存储在网页或用户的计算机上。

A、Cookie

cookie是存储在客户端文件系统的文本文件中或客户端浏览器对话的内存中的少量数据,它主要用来跟踪数据设置。下面我们举例说明:假设我们要定制化 一个欢迎互联网网页,当用户请求缺省的互联网网页时,应用程序会首先检查用户在此前是否已经注册,我们可以从cookie中获取用户的信息:

[c#]
if (Request.Cookies[“username”]!=null)
lbMessage.text=”Dear “+Request.Cookies[“username”].Value+”, Welcome shopping here!”;
else
lbMessage.text=”Welcome shopping here!”;

如果要存储用户的资料,我们可以使用下面的代码:

[c#]
Response.Cookies[“username’].Value=username;

这样,当用户请求该网页时,我们就可以方便地识别该用户。

ASP.NET中的状态管理(2)

B、隐藏域

隐藏域不会显示在用户的浏览器中,但我们可以象设置标准控制的属性那样设置其属性。当一个网页被提交给服务器时,隐藏域的内容和其他控制的值一块儿被送 到HTTP Form集合中。隐藏域可以是任何存储在网页中的与网页有关的信息的存储库,隐藏域在其value属性中存储一个变量,而且必须被显性地添加在网页上。

ASP.NET中的HtmlInputHidden控制提供了隐藏域的功能。

[c#]
protected System.Web.UI.HtmlControls.HtmlInputHidden Hidden1;
file://给隐藏域赋值
Hidden1.Value=”this is a test”;
file://获得一个隐藏域的值
string str=Hidden1.Value;

需要注意的是,要使用隐藏域,就必须使用HTTP-Post方法提交互联网网页。尽管其名字是隐藏域,但它的值并不是隐藏的,我们可以通过“查看源代码”功能找到它的值。

C、状态查看

包括网页本身在内的Web Forms网页上的每个控制都有一个名字为ViewState的属性,它是一个自动保持网页和控制状态的内置结构,这意味着在向服务器提交网页后,我们无需采取任何措施来恢复控制的数据。
在这里,对我们有用的是ViewState属性,我们可以利用它来保存与服务器之间多次的请求-应答期间的信息。

[c#]
file://保存信息
ViewState.Add(“shape”,”circle”);
file://获取信息
string shapes=ViewState[“shape”];

注意:与隐藏域不同的是,在使用查看源代码功能时,ViewState属性的值是不可见的,它们是被压缩和加密的。

D、查询字符串

查询字符串提供了一种简单而受限制的维护状态信息的方法,我们可以方便地将信息从一个网页传递给另一个网页,但大多数浏览器和客户端装置都把URL的长度限制在255个字符长。此外,查询值是通过URL传递给互联网的,因此,在有些情况下,安全就成了一个大问题。

带有查询字符串的URL如下所示:

http://www.examples.com/list.aspx?categoryid=1&productid=101

当有客户端请求list.aspx后,可以通过下面的代码获取目录和产品信息:


[c#]
string categoryid, productid;
categoryid=Request.Params[“categoryid”];
productid=Request.Params[“productid”];

注意,我们只能使用HTTP-Get提交该互联网网页,否则就不能从查询字符串获得需要的值。

ASP.NET中的状态管理(3)

2、服务器端的状态管理


信息存储在服务器上,尽管其安全性较高,但会占用较多的web服务器资源。

A、Aplication对象

Aplication对象提供了一种让所有在Web应用服务器中运行的代码访问的存储数据的机制,插入应用程序对象状态变量的数据应该能够被多个对话共 享,而且不会频繁地改变。正是因为它能够被全部应用程序所访问,因此,我们需要使用Lock和UnLock对避免其中的值出现冲突。

[c#]

Application.Lock();

Application[“mydata”]=”mydata”;

Application.UnLock();


B、Session对象

Session对象可以用来存储需要在服务器的多次请求-应答期间和对网页的请求期间进行维护的指定对话的信息。Session对象是每个对话的存在的基础,也就是说不同的客户端生成不同的Session对象。存储在对话状态变量中的数据存在的周期较短。

每个活动的ASP.NET对话是由一个包含合法的URL ASCII字符、长度为120位的SessionID字符串唯一确定和跟踪的。SessionID的值是由一个能够保证唯一性的算法生成的,以便对话之间 不会冲突,SessionID的随意性使得我们很难猜测出一介现有对话的ID。

根据应用程序的配置设置情况,SessionID通过HTTP cookie或修改后的URL在客户端-服务器请求之间进行传输。那么,如何设置应用程序配置的对话装备方法。

每个web应用程序必须有一个名字为web.config的配置文件,它是基于XML文件的。下面是一个名字为sessionState的对话:

cookieless选项的值为true或false。当其值为false(缺省值)时,ASP.NET将使用HTTP cookie来识别用户;当其值是true时,ASP.NET将随机地生成一个唯一的号码,并将它放在被请求的文件的前面,这一号码是用来识别用户的,我 们能够在IE的地址栏中看到它:

http://localhost/Management/(2yzakzez3eqxut45ukyzq3qp)/Default.aspx

OK,下面我们再回到session对象。

[c#]
file://存储信息
Session[“myname”]=”Mike”;
file://获得信息
myname=Session[“myname”];

C、数据库

数据库将使我们能够存储大量的与Web应用程序中的状态相关的信息,有时,用户会使用唯一的ID频繁地访问数据库,我们可以将它存储在数据库中,在对网站中网页的多次请求中使用。

总结

ASP.NET中的功能和工具比ASP中更多,使我们能够更有效和高效地管理网页的状态。具体选择哪种方法与你的应用程序有关,在选择时可以考虑下面的问题:

·需要存储多少信息?

·客户端接受持久的还是内存中的cookie?

·希望在客户端还是在服务器端存储信息?

·要存储的信息需要保密吗?

·希望你的网页的性能如何?


转自: http://www.51un.net/Tool_Document/NewsInfo.asp?Classid=13&ArticleID=2406
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值