状态管理I(客户端)

状态类型       位置          有效时间   

ViewState      客户端          只在一个页面中

Cookie       客户端          关闭浏览器时会删除临时cookie,永久cookie存储在客户系统的磁盘上

 

ViewState


Web服务器控件自动使用ViewState来使事件工作.ViewState包含的状态与控件发送给客户端时包含的状态相同,当浏览器把窗体发送回服务器时,ViewState包含了初始值,但所发送的控件包含新值.如果初值和新值有区别,就调用相应的事件处理程序.

ViewState.在Page指令中可以把EnableViewState属性设置为False,就可以关闭页面中所有控件的ViewState,也要指定某个控件的EnableViewState属性,无论页面进行了什么配置,只要定义了控件的EnableViewState属性,就使用控件配置的值.只有没有配置ViewState的控件才使用页面配置的值.
使用方式如下:
ViewState["MyData"] = "My Data";
读取前面存储的ViewState如下:
string myData = (string)ViewState["Mydata"]
放到ViewState里面的变量是object类型,取出来也是object,所以必要时需要类型转换.

在发送给客户端的HTML代码中,整个页面的ViewState存储在一个隐藏的字段中
<input type="Hidden" name="_VIEWSTATE" Value="">

缺点:数据总要从服务器传给客户端,再从客户端传送给服务器,增加了网络流量.为了减少流量,可以关闭
优点:使用隐藏字段,每个浏览器都可以使用这个特性,用户不能关闭它.一般数据都可以放到ViewState里面,显示在客户端的隐藏字段的值是经过加密的(但不保证绝对安全).另外,在配置文件中还可以指定加密的算法,不指定时使用默认的.

ViewState只保存当前页面中的值,如果想保存多个页面,请使用Cookie的客户页保存状态.

Cookie
cookie是存放在客户端的,可以是临时的,也可以是永久的,也可以设置有效日期,但不能保证cookie会在座到该日期为止.用户可以删除cookie,如果本地存储的cookie太多.浏览器也有可能会删除它,每个浏览器只能为每个服务器存储20个cookie,为所有服务器存储300个cookie.到上限时会删除有一段时间不再使用的cookie,每个cookie不能存储多于4K的数据

使用方式:

HttpCookie cookie =new HttpCookie("myCookie");
cookie.Values.Add("mystate","myval");
//指定cookie存储在客户机上3个月
cookie.Expires =DateTime.Now.AddMonths(3);
Response.Cookies.Add(cookie);
访问时
HttpCookie cookie = Requerst.Cookies["myCookie"];
string myVal = cookie.Values["mystate"];

posted on 2009-01-16 00:10  Ss_Andy  阅读(579)  评论(0编辑  收藏  举报