一、ViewState:ViewState是ASP.NET中.aspx特有的,经过HTTP报文传递,全部服务器端控件的值都会自动保存在ViewState 中。而且ViewState只能保存:String、Int、Bool、Array、ArrayList、Hashtable类型数据。 html
ViewState经过base64编码后保存在页面隐藏域中,页面关闭时ViewState就销毁。
道理同隐藏域,只是.NET Framwork封装了传值取值过程而已。
使用ViewState有一个前提:页面必须有一个服务端窗体的标记<form runat="server">,服务器输出时,同时将ViewState的值添加到表单的隐藏域中。页面请求时,同时也将页面的__ViewState隐藏域提交,服务器在接收到请求时,自动在报文中寻找__ViewState的隐藏域,若是有存在的话,则自动将它的值解码后赋值给页面的ViewState属性中。
缺点:加大网站数据流量、下降速度;只适合于在同一个页面不关闭的状况下屡次与服务器之间的交互。 浏览器
二、Cookie:cookie数据保存在浏览器客户端(通常为4KB),也是经过HTTP报文传递。 服务器
cookie保存两种方式 Ⅰ、保存在浏览器内存中,不关闭浏览器状况下访问任何页面均可以获得。 cookie
Ⅱ、保存到硬盘中(设置Expires(只写)的时间,若是设置时间为负数时再返回给浏览器,cookie会被清除。) cook.Expires=Datetime.Now.AddDays(-1)。 工具
无论客户端浏览器请求任何数据,报文都会带有cookie。
清空全部Cookie时,谨防使用如下循环删除,否则可能出现死循环。(具体缘由:在获取Request.Cookies的时候FrameWork会自动引用Respone.Cookies;具体实现可使用反编译工具查看...)
HttpCookieCollection hcc=Request.Cookies;
for(int i=0;i<hcc.Count;i++)
{ HttpCookie cook =hcc[i];
cook.Expries=DtaeTime.NOW.Adds(-1);
Respone.Cookie.Add(cook);
}
可使用反向循环的方法删除。
for(int i=hcc.Count;i>0;i--){..} 网站
注:Cookie大小限制(转) 编码
源文:http://www.cnblogs.com/tedyding/archive/2010/03/20/1690690.html orm
1、浏览器容许每一个域名所包含的cookie数: server
Microsoft指出InternetExplorer8增长cookie限制为每一个域名50个,但IE7彷佛也容许每一个域名50个cookie。 htm
Firefox每一个域名cookie限制为50个。
Opera每一个域名cookie限制为30个。
Safari/WebKit貌似没有cookie限制。可是若是cookie不少,则会使header大小超过服务器的处理的限制,会致使错误发生。
注:“每一个域名cookie限制为20个”将再也不正确!
2、当不少的cookie被设置,浏览器如何去响应。
除Safari(能够设置所有cookie,无论数量多少),有两个方法:
最少最近使用(leastrecentlyused(LRU))的方法:当Cookie已达到限额,自动踢除最老的Cookie,以使给最新的Cookie一些空间。InternetExplorer和Opera使用此方法。
Firefox很独特:虽然最后的设置的Cookie始终保留,但彷佛随机决定哪些cookie被保留。彷佛没有任何计划(建议:在Firefox中不要超过Cookie限制)。
3、不一样浏览器间cookie总大小也不一样:
Firefox和Safari容许cookie多达4097个字节,包括名(name)、值(value)和等号。
Opera容许cookie多达4096个字节,包括:名(name)、值(value)和等号。
InternetExplorer容许cookie多达4095个字节,包括:名(name)、值(value)和等号。
注:多字节字符计算为两个字节。在全部浏览器中,任何cookie大小超过限制都被忽略,且永远不会被设置。