我们在ASP中能够通过cookie查询字符串应用程序对话等轻易地解决这些问题现在到了ASPNET环境中我们仍然可以使用这些功能只是它们的种类更多了功能也更强大了
管理互联网网页主要有二种不同的方法客户端和服务器端
客户端的状态管理
在客户端服务器之间的多次请求应答期间服务器上不保存信息信息将被存储在网页或用户的计算机上
ACookie
cookie是存储在客户端文件系统的文本文件中或客户端浏览器对话的内存中的少量数据它主要用来跟蹤数据设置下面我们举例说明假设我们要定制化一个欢迎互联网网页当用户请求缺省的互联网网页时应用程序会首先检查用户在此前是否已经注册我们可以从cookie中获取用户的信息
[c#]
if (RequestCookies[username]!=null)
lbMessagetext=Dear +RequestCookies[username]Value+ Welcome shopping here!;
else
lbMessagetext=Welcome shopping here!;
如果要存储用户的资料我们可以使用下面的代码
[c#]
ResponseCookies[username]Value=username;
这样当用户请求该网页时我们就可以方便地识别该用户
B隐藏域
隐藏域不会显示在用户的浏览器中但我们可以象设置标准控制的属性那样设置其属性当一个网页被提交给服务器时隐藏域的内容和其他控制的值一块儿被送到HTTP Form集合中隐藏域可以是任何存储在网页中的与网页有关的信息的存储库隐藏域在其value属性中存储一个变量而且必须被显性地添加在网页上
ASPNET中的HtmlInputHidden控制提供了隐藏域的功能
[c#]
protected SystemWebUIHtmlControlsHtmlInputHidden Hidden;
file://给隐藏域赋值
HiddenValue=this is a test;
file://获得一个隐藏域的值
string str=HiddenValue;
需要注意的是要使用隐藏域就必须使用HTTPPost方法提交互联网网页尽管其名字是隐藏域但它的值并不是隐藏的我们可以通过查看源代码功能找到它的值
C状态查看
包括网页本身在内的Web Forms网页上的每个控制都有一个名字为ViewState的属性它是一个自动保持网页和控制状态的内置结构这意味着在向服务器提交网页后我们无需采取任何措施来恢复控制的数据
在这里对我们有用的是ViewState属性我们可以利用它来保存与服务器之间多次的请求应答期间的信息
[c#]
file://保存信息
ViewStateAdd(shapecircle);
file://获取信息
string shapes=ViewState[shape];
注意与隐藏域不同的是在使用查看源代码功能时ViewState属性的值是不可见的它们是被压缩和加密的
D查询字符串
查询字符串提供了一种简单而受限制的维护状态信息的方法我们可以方便地将信息从一个网页传递给另一个网页但大多数浏览器和客户端装置都把URL的长度限制在个字符长此外查询值是通过URL传递给互联网的因此在有些情况下安全就成了一个大问题
带有查询字符串的URL如下所示
http://wwwexamplescom/listaspx?categoryid=&productid=
当有客户端请求listaspx后可以通过下面的代码获取目录和产品信息
[c#]
string categoryid productid;
categoryid=RequestParams[categoryid];
productid=RequestParams[productid];
注意我们只能使用HTTPGet提交该互联网网页否则就不能从查询字符串获得需要的值
服务器端的状态管理
信息存储在服务器上尽管其安全性较高但会占用较多的web服务器资源
AAplication对象
Aplication对象提供了一种让所有在Web应用服务器中运行的代码访问的存储数据的机制插入应用程序对象状态变量的数据应该能够被多个对话共享而且不会频繁地改变正是因为它能够被全部应用程序所访问因此我们需要使用Lock和UnLock对避免其中的值出现沖突
[c#]
ApplicationLock();
Application[mydata]=mydata;
ApplicationUnLock();
BSession对象
Session对象可以用来存储需要在服务器的多次请求应答期间和对网页的请求期间进行维护的指定对话的信息Session对象是每个对话的存在的基础也就是说不同的客户端生成不同的Session对象存储在对话状态变量中的数据存在的周期较短
每个活动的ASPNET对话是由一个包含合法的URL ASCII字符长度为位的SessionID字符串唯一确定和跟蹤的SessionID的值是由一个能够保证唯一性的算法生成的以便对话之间不会沖突SessionID的随意性使得我们很难猜测出一介现有对话的ID
根据应用程序的配置设置情况SessionID通过HTTP cookie或修改后的URL在客户端服务器请求之间进行传输那么如何设置应用程序配置的对话装备方法
每个web应用程序必须有一个名字为webconfig的配置文件它是基于XML文件的下面是一个名字为sessionState的对话
cookieless选项的值为true或false当其值为false(缺省值)时ASPNET将使用HTTP cookie来识别用户当其值是true时ASPNET将随机地生成一个唯一的号码并将它放在被请求的文件的前面这一号码是用来识别用户的我们能够在IE的地址栏中看到它
http://localhost/Management/(yzakzezeqxutukyzqqp)/Defaultaspx
OK下面我们再回到session对象
[c#]
file://存储信息
Session[myname]=Mike;
file://获得信息
myname=Session[myname];
C数据库
数据库将使我们能够存储大量的与Web应用程序中的状态相关的信息有时用户会使用唯一的ID频繁地访问数据库我们可以将它存储在数据库中在对网站中网页的多次请求中使用
总结
ASPNET中的功能和工具比ASP中更多使我们能够更有效和高效地管理网页的状态具体选择哪种方法与你的应用程序有关在选择时可以考虑下面的问题
·需要存储多少信息?
·客户端接受持久的还是内存中的cookie?
·希望在客户端还是在服务器端存储信?
·要存储的信息需要保密吗?
·希望你的网页的性能如何?