.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” />