ASP.NET应用程序管理状态

问题引出:Http协议是无状态的,也就是说当客户端一次请求完成后,下一次再发出请求时,服务器是无法记忆的。在ASP.NET中,客户端每次发出一个请求,服务器都会为之新建一个页面实例,这也就意味着先前的数据都要丢失。

实际上通常需要服务器能维护客户端的状态。ASP.NET提供了几种技术来实现这个功能,如ViewState 控件状态 隐藏域 查询字符串 cookies session 应用程序状态 等。

 

下面就简单的叙述几个常用技术的原理:

1.     ViewState:视图状态。几乎每个服务器控件都有EnableViewState这个属性,默认情况下为true,也就是每个控件都具有视图状态。ASP.NET中,ViewState对象以key-value的形式存储值,可以这样使用:ViewState[“Name”]=”sky”。当一个控件具有ViewState时,ASP.NET引擎会在源代码的加入一个隐藏域(hidden),名为ViewState的元素,值为经过编码后的字符串,这个隐藏域将随着HTML代码发送给客户端。当客户端下次再请求时,这个隐藏域又会发送回到服务器,ASP.NET引擎会反序列化这个字符串并将给对应的控件,这样就相当于记住了上次的状态。

很明显,如果每个控件都具有ViewState,也就是说要对应的在源代码中加入许多隐藏域,而这些都是在客户端和服务器中传输的,所以会导致传输的效率下降。例如,一个控件保存了一篇文章,而这个控件具有ViewState,则每次这大量数据都要在客户端和服务器传输,很占用带宽。所以通常需要禁用ViewState。ASP.NET中可以禁用当个控件的ViewState也可以将这个页面的禁用掉。

知识点:1.ViewState可以存储许多类型的值,对于自定义的对象,由于数据在存储时是要经过序列化的,所以该对象必须知识序列化,也就是要用[Serializeable]修饰类。

2.虽然ViewState的value是经过序列化的,但是使用简单的根据就可以将它解析出来,如ViewStateDecoder,这样安全性不高。ASP.NET提供了一个属性,ViewStateEncryptionMode,可以用来设置加密。

使用ViewState的缺点就是无法实现跨页面传递数据,通常一个页面要向另一个页面发送数据,这时候就需要使用下面的几种常用技术。

 

2.     查询字符串:查询字符串是以参数的形式提交数据的,也就是在URL后面加上:?key-value形式的参数,提交到服务器后,服务器就可以用Request.QueryString[key]获得提交的数据。

使用参数提交有一些缺点,如:提交的数据会显示在URL后面;只能提交简单的字符串;提交数据的长度受限制等。

知识点:如果提交的数据具有一些特殊字符,则将URL进行编码,方法是用Server.UrlEncode(),相应的解码用Server.UrlDecode()。

 

3.     跨页面回送技术:ASP.NET提供了跨页面回送技术,使服务器能够获取当前页面。跨页面回送技术是PostBack的扩展。许多控件都有一个PostBackUrl属性。

例如:可以设置一个Button的PostBackUrl为”Hello.aspx”,那么点击按钮时,将跳转到Hello.aspx页面,在该页面可以使用PreviousPage对象来获得之前页面的相关信息。


4.     Cookies机制:Cookies是一种将保存在客户端的机制,客户端每次向浏览器发送请求时,该域名相关的Cookies都会随着请求报文发送到服务器,服务器可以更新Cookies的内容,响应时,Cookies又随着请求报文发送到客户端,Cookies就是这样在客户端和服务器之间传递的。说到底,Cookies就是保存在客户端的硬盘上的一些文件信息,由客户端维护。ASP.NET中Cookies对象可以方便的使用。

 

5.     Session机制:会话状态。Session是将数据保存在服务器的机制,每个客户端对应一个Session。Session的工作原理是这样的:当客户端首次发送请求到服务器时,服务器就为该客户端在Session池中分配一个Session,并用一个唯一的CookiesId标识,该Id是保存在Cookies中的。则下次客户端再请求时,服务器就可以根据该Id读取到与这个用户相关的数据了。ASP.NET中Session对象可以方便的使用。

知识点:Session的信息可以在配置信息中设置,如:Session的超时时间,存储的位置等。

Cookies与Session的区别:1.Cookies是保存在客户端的,而Session是保存在服务器的。2.当用户关闭浏览器时,用户Session相关的数据就丢失了,而Cookies的则不会。3. Cookies每次都是随着报文传输的,安全性较低,Session是保存在服务器中的,相对安全性较高。

 

6.     应用程序状态:Application。与Session一样,应用程序的数据也是保存在服务器上的,也是用key-value的用法,如:Application[“Name”]=”sky”; 当页面关闭后在访问时,Application保存的值依然存在。

知识点:实际中很少用应用程序来保存状态,因为这样做会很大较低应用程序的整体性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值