.NET状态管理

Http协议是一种无状态协议,但在实际应用中,很多时候都需要保存其状态以便下次访问。因此应用程序必须提供能保存状态的状态管理功能。状态可保存在客户端,也可保存在服务器端。

1.  基于客户端的状态管理

1)  视图状态:

a)         ViewState属性提供一个字典对象,用于在同一页多个请求之间保留值。

b)         存储方式:视图状态中的值是经过哈希计算和压缩,并针对Unicode实现进行编码,存储在页的多个隐藏域中,如果存储量过大会影响页的发送和显示速度。

c)         安全性:它可以被篡改,可以从查看页输出源中,看到隐藏域的信息,其安全性高于隐藏域。

d)         存取:ViewState[“Name”]=”xxxx”,String Name=ViewState[“Name”].tostring()

2)  隐藏域:

a)       此控件将呈现为一个标准的Html隐藏域,在浏览器中不以可见呈现。

b)       存储方式:只支持简单的存储结构,只提供一个字符串值域存放信息。存储受限,量过大可能受到代理和防火墙的阻止。

c)       安全性:也可能被篡改。

3)  Cookies:

a)       存储在客户端的文本文件中。

b)       存储方式:可以是临时的,也可以是永久的。浏览器最大支持4096字节。

c)       安全性:可能被客户机篡改和操纵。

d)       简单的操作:用Response 发送Cookie,用Request 获取Cookie

HttpCookie MyCookie=new HttpCookie(“userName”)  //创建一个userName的Cookie

MyCookie.Value //设置当前Cookie的值

MyCookie.Expires= DataTime.Now.addHours(1) //设置有效期

Response.Cookies.Add(MyCoookie) //发送到客户端

//获取Cookie的信息

HttpCookie getCookie=Request.Cookies[“userName”]

String userName=getCookie.toString()

4)  URL字符串:

a)       如:http://hao123.com/?userId=1&userName=cc

b)       存储量:2083字符。

2.  其于服务器端的状态管理:

1)  Application对象:是针对所有客户的。每一个客户都可使用。

a)       数据的存储和提取:Application[“Name”]=”陈在下”,                   String Name=Application[“Name].toString()。

b)       同时访问要加锁:Application.Lock() ,Application.UnLock()。

2)  Session对象:每个用户对网站的一次访问,超时自动结束会话。

a)       数据的存取:Session[“Name”]=”xxx”,string Name=Session[“Name”].tostring()。

b)       在webconfig配置:<sessionState mode=”inProc” cookieless=”false” timeout=”20” />

 

posted @ 2011-01-12 15:05  】Richard【  阅读(291)  评论(0编辑  收藏  举报