10asp.net==============VIEWSTATE和Cookis

ViewState(页面级)

使用方式: 作用域---页面级
保存数据方式:
ViewState["myKey"]="MyData";
读取数据方式:
String myData;
if(ViewState["myKey"]!=null)
{myData=(string)ViewState["myKey"];}
ViewState不能存储所有的数据类型,仅支持:String、Integer、Boolean、Array、ArrayList、Hashtable
使用ViewState的前提:页面上必须有一个服务器端窗体标记(<form runat=“server”>)
服务器在接收到用户请求一个页面后,会自动在请求报文中找看是否包含__VIEWSTATE的隐藏域,如果有,则将中间的值解码后添加到页面的ViewState属性中。
服务器在输出的时候,也会自动的将ViewState中的值添加到表单里名叫__VIEWSTATE的隐藏域中。
VIEWSTATE适用于同一个页面在不关闭的情况下多次与服务器交互
跨页面提交的__VIEWSTATE不会被目标页面装入页面的ViewState属性中
服务器将ViewState里保存的值经过Base64编码后,自动添加到页面的隐藏域中
使用ViewState可以方便的在服务器端将数据输出保存到客户端页面的一个隐藏域中
查看生成的源代码,ASP.Net将所有隐藏内容统一放到了名字为__VIEWSTATE的隐藏字段中,使用序列化算法将所有隐藏内容放到一个字符串中。点击几次在使用ViewStateDecoder这个工具查看ViewState内容,发现了确实将这些改变的内容放到了ViewState中。存储非表单域、非value值的容器。

禁用ViewState的方法,禁用单个控件的ViewState设定enableviewstate=false,禁用ViewState以后TextBox版本不受影响,ss。禁用整个页面的,在aspx的Page指令区加上EnableViewState="false" 。内网系统、互联网的后台可以尽情的用ViewState。
回答ViewState原理的时候:说Input版本(TextBox)自增和Div版本(Label)的不同。(完美!!!)-- 当某些控件的某些属性不属于浏览器表单的提交范围时,fw将会把这些属性添加到ViewState中保存。
WebForm的IsPostBack依赖于ViewState

缺点:加大网站的流量、降低访问速度、机密数据放到表单中会有数据欺骗等安全性问题。故事:自行打印存折,因为余额不是写到存折这个隐藏字段中的,唯一的关联就是卡号。要把机密数据放到服务器,并且区别不同的访问者的私密区域,那么就要一个唯一的标识。

Cookie

Cookie是一种能够让网站服务器把少量数据(4kb左右)储存到客户端的硬盘或内存,并且读取出来的一种技术。
当你浏览某网站时,由Web服务器放置于你硬盘上的一个非常小的文本文件,它可以记录你的用户ID、浏览过的网页或者停留的时间等网站想要你保存的信息。当你再次通过浏览器访问该网站时,浏览器会自动将属于该网站的Cookie发送到服务器去,服务器通过读取Cookie,得知你的相关信息,就可以做出相应的动作。如在页面显示欢迎你的标语,或者让你不用输入ID、密码就直接登录等等。
浏览器访问一个站点时,只将属于当前站点的Cookie发过到服务器。(根据域名)—(没必要把每家医院的病历本都带过去。)
Cookie不兼容浏览器!
最好是将要保存的内容在服务器端加密(安全),为什么?
在硬盘中存放的位置与使用的操作系统和浏览器密切相关。
浏览器保存Cookie有两种方式:1—浏览器的内存中;2—浏览器所在的电脑的硬盘中。为将要写入到浏览器的Cookie对象设置失效时间:cook.Expires = DateTime.Now.AddMinutes(5);//设置cook5分钟后失效
开发场景:常用于登录和保存用户最近浏览商品
从浏览器发来的Cookie的Expires属性值是无效的.(浏览器在向服务器发送Cookie的时候,没有将Cookie的失效时间发送过去)
请求由上至下:
第一次访问网站,请求cookLogin.aspx页面,服务器将页面的执行结果(html+css+js)发回到浏览器。浏览器翻译执行html+css+js,用户看到界面。

补充:
不同浏览器间cookie总大小也不同:
Firefox和Safari允许cookie多达4097个字节,包括名(name)、值(value)和等号。
Opera允许cookie多达4096个字节,包括:名(name)、值(value)和等号。
InternetExplorer允许cookie多达4095个字节,包括:名(name)、值(value)和等号。
浏览器允许每个域名所包含的cookie数:
Microsoft指出InternetExplorer8增加cookie限制为每个域名50个,但IE7似乎也允许每个域名50个cookie。
Firefox每个域名cookie限制为50个。
Opera每个域名cookie限制为30个。
Safari/WebKit貌似没有cookie限制。但是如果cookie很多,则会使header大小超过服务器的处理的限制,会导致错误发生。
注:“每个域名cookie限制为20个”将不再正确!
当很多的cookie被设置,浏览器如何去响应。
除Safari(可以设置全部cookie,不管数量多少),有两个方法:
最少最近使用(leastrecentlyused(LRU))的方法:当Cookie已达到限额,自动踢除最老的Cookie,以使给最新的Cookie一些空间。InternetExplorer和Opera使用此方法。
Firefox很独特:虽然最后的设置的Cookie始终保留,但似乎随机决定哪些cookie被保留。似乎没有任何计划(建议:在Firefox中不要超过Cookie限制)。

服务器设置Cookie:
HttpCookie cok = new HttpCookie(“uId”, “10001”);//(“键”,”值”)
cok.Expires = DateTime.Now.AddDays(18);//设置失效日期-现在之后的18天后
context.Response.Cookies.Add(cok); //添加到响应中

服务器获得客户端传来的Cookie:
string strUName=context.Request.Cookies[“uId”].Value;//从请求中获得Cookie

表单是和页面相关的,只有浏览器端提交了这些数据,服务器端才能得到。而有时候希望在服务端任意的地方存取一些和访问者相关的信息,这时候就不方便将这些信息保存到表单中了,因为如果那样的话必须随时注意在所有页面表单中都保存这些信息。Cookie是和站点相关的,并且每次向服务器请求的时候除了发送表单参数外,还会将和站点相关的所有Cookie都提交给服务器,是强制性的。Cookie也是保存在浏览器端的,而且浏览器会在每次请求的时候都会把和这个站点的相关的Cookie提交到服务器,并且将服务端返回的Cookie更新到硬盘,因此可以将信息保存在Cookie中,然后在服务器端读取、修改。服务器返回数据除了普通的html数据以外,还会返回修改的Cookie,浏览器把拿到的Cookie值更新本地浏览器的Cookie就可以。
哪怕请求jpg、js、css这种文件也会带着Cookie,因为服务器端可能要进行Session的操作,比如判断是否登录。互联网优化的案例:图片服务器和主站域名不一样,降低Cookie流量的传输。面试时聊网站调优
在服务器端控制Cookie案例,一个页面设置Cookie,一个页面读取Cookie
设置值的页面:Response.SetCookie(new HttpCookie("UserName", TextBox1.Text));
读取值的页面:Label1.Text = Request.Cookies["UserName"].Value;
Cookie的缺点和表单一样,而且还不能存储过多信息。客户端、服务器端设置的Cookie双方都能读。

服务器向浏览器写出Cookie实际上就是在 响应报文中 生成响应行:
* Set-Cookie: uinfo2=123; expires=Mon, 06-Jun-2011 06:48:47 GMT; path=/
* 浏览器读取此 响应行后 会自动在客户端硬盘中产生一个Cookie文件,名为:
* Cookie:[email protected]/,注意@后的 localhoust/ ,实际上是颁发此Cookie网站的域名;
* 当浏览器下次再访问此域名时,就会自动将 后缀为 localhoust/ 的cookie文件内容发送到服务器。

第二次当用户点击登录按钮,将用户名密码提交到服务器后,服务器验证通过,并讲用户ID存入一个Cookie对象,最后将Cookie对象随响应信息一同发回浏览器。浏览器根据情况储存cookie文本。
第三次当用户访问该网站任何页面时,浏览器会自动根据域名将cookie信息一同发往服务器。(注意:浏览器自动完成此操作)

时间: 2024-11-01 09:35:50

10asp.net==============VIEWSTATE和Cookis的相关文章

viewstate

学习标签: ViewState 本文导读:在web窗体控件设置为runat = "server",这个控件会被附加一个隐藏的属性_ViewState,_ViewState存放了所有控件在ViewState中的状态值.ViewState是一个名称/值的对象集合.当请求某个页面时,ASP.NET会把所有控件的状态序列化成一个字符串,然后作为窗体的隐藏属性送到客户端,当客户端吧页面回传时,ASP.NET分析回传的窗体属性,并赋给控件对应的值. 当我们在写一个asp.net表单时, 一旦标明了

HTTP中Get与Post、ViewState 原理

Http是请求,响应的模型,服务器不会来读取浏览器的网页,只能够得到客户端提交过来的数据当用户点击提交,服务器就知道"提交回来了"(PostBack) Get与Post 设置form的method属性指定表单提交方式,get(默认值)是通过URL传递值,传递的数据量是有限的post传递的表单值是隐藏到http报文中,URL中看不到,会有浏览器提示重新提交表单的问题,get没有Get方式URL数据格式,服务端文件名跟着"?",由于客户端可能向服务器端提交多个键值对,键

内置对象session ,cookic,Application,ViewState

一.内置对象 (一)Response - 响应请求对象1.定义:Response对象用于动态响应客户端请示,控制发送给用户的信息,并将动态生成响应.Response对象只提供了一个数据集合cookie,它用于在客户端写入cookie值.若指定的cookie不存在,则创建它.若存在,则将自动进行更新.结果返回给客户端浏览器.2.方法(1)Redirect用法:Response.Redirect("url")作用是在服务器端重定向于另一个网页(2)Write功能:向客户端发送浏览器能够处理

学习ViewState状态保持

为什么深入了解ViewState 对ViewState的误解可能导致... 1.导致一些敏感信息被泄漏: 2.针对ViewState的攻击(http://gollum.easycp.de/gollum/gollum.php?a=core&l=en&wl=en&q= 这里作者估计是表达了通过ViewState的攻击来达到控制对方的目的.比如一个等离子电视的价格被修改为了1美元一台) 3.很差的性能,在某些极端的情况下可能根本就没有性能. 4.并发性差 -- 想象一下如果每次回传的数据

ASP.NET ViewState详解

ASP.NET ViewState详解[转载] asp.net存储textboxserializationstring服务器 作者:Infinities Loop 概述 ViewState是一个被误解很深的动物了.我希望通过此文章来澄清人们对ViewState的一些错误认识.为了达到这个目的,我决定从头到尾详细的描述一下整个ViewState的工作机制,其中我会同时用一些例子说明我文章中的观点,结论.比如我会用静态控件(declared controls)和动态控件(dynamic contro

Application,Session,Cookie,ViewState和Cache区别

在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生命期 整个应用程序/所有用户 服务器端 Cache 任意大小 可以根据需要设定 整个应用程序/所有用户 服务器端 Session 小量,简单的数据 用户活动时间+一段延迟时间(一般为20分钟) 单个用户 服务器端 Cook

[Asp.Net]状态管理(Session、Application、Cache、Cookie 、Viewstate、隐藏域 、查询字符串)

Session:  1. 客户在服务器上第一次打开Asp.Net页面时,会话就开始了.当客户在20分钟之内没有访问服务器,会话结束,销毁session.(当然也可以在Web.config中设置缓存时间)可以在Global.aspx的Session_Start()事件处理程序中,可以初始化会话变量.在下面的实例中,名为mydata的会话状态被初始化为0: 运行结果: 2.Session是保存在服务器端的用户变量.我可以在一个页面中对Session进行值,然后在另一个页面里访问它. Session的

.NET中ViewState的原理

今天在公司竟然有人在问我ViewState原理.其实这个事最基础的东西.可能在网上说的有点笼统.我现在将我个人理解分享一下: 首先浏览器经过发送请求至服务器端后,服务器端会接受这个请求,查看客户端发送过来的ViewState(不管是自定义还是服务控件所创建). 他会自动创建一个__VIEWSTATE的东东(这个你不用管__VIEWSTATE)到底是什么.可以当他是一个临时存储的变量(在.NET中可能叫隐藏域). 这个东东当然是经过Base64加密以后返回到浏览器端(这一加密过程在页面生命周期的S

【2017-5-22】Application ViewState RepeaterCommand用法

内置对象:get:RequestResponseQueryString的方式 post:SessionCookies Application存贮在服务器端,占用服务器内存生命周期:永久 所有人访问的都是这一个对象 ViewState存储之前页面状态的日志文件 ---------------------------Repeater的Command用法是Repeater控件的原生事件用法 Repeater里面如果循环控件,控件的ID是会被改变的ItemCommand事件 - 任何控件执行提交都来触发