ViewState探索

什么是
view state?


View
State是客户端状态管理重要机制之一。当页面PostBack(向服务器发送或获得数据)时,它能存储页面的值。
ASP.NET把View
State属性作为页面面内置的结构。当多个请求相同的页面时自动存储数据。

例子:

如果你向加一个变量到View
State,

  1. ViewState["Var"]=Count;

从View
State返回数据

  1. string Test=ViewState["TestVal"];

在返回数据时,经常我们需要对ViewState中的值进行类型转换

view
state有那些好处?

* 易于实现
    *
不需要服务器资源
    * 可增强安全性
,它能被压缩或编码。

view
state有那些缺点?

* 如果保存比较大的数据,将增加性能开销。因为它和页面相关。
    *
如果它把数据以散列格式存放在隐藏域中,容易被捕获
    * 在移动设备中不被支持。

什么时候使用view
state?

当你选择View
State作为维护页面状态的机制时,应该记住下面几点:

   
* 数据应该比较小,因为数据和页面控件绑定。数据量大,导致性能开销多大。
    * 避免在view
state存储安全要求高的数据。

什么时候避免使用view
state?

在下列情况下,控件不需要view
state:

   
* 控件从不改变
    *
控件每次PostBack重新构建
    *
控件时input类型,只有用户才能改变

view
state存在那里?

View
State把页面控件的值散列,编码为一个字符串。它仅包含页面和控件信息。它和服务器没有交互。它一直保存在客户端浏览器的页面里。ViewState使用隐藏域保存这些编码后的信息。
假想你写一段简单的代码,保存控件的值:

  1. ViewState["Value"] = MyControl.Text;

运行应用程序,在浏览器,右键
> 查看源文件。 你将得到下面代码块。

值看起来向被加密的字符串。这是Base64编码。这不是加密字符串,所以易于解码。

在view
state怎么存储对象?

我们能容易的存储一个对象,就像存储字符串,和int类型的变量。但我们需要把它转为字节流,因为ViewState存储数据在页面隐藏域中。所以我们需要序列化。如果要存放在view
state中的数据没有被序列化,将出现错误。

  1. [Serializable]

  2. public class student

  3. {

  4. public int Roll;

  5. public string Name;

  6. public void AddStudent(int intRoll,int strName)

  7. {

  8. this.Roll=intRoll;

  9. this.Name=strName;

  10. }

  11. }

把类student的对象存储在view
state.

  1. //Store Student Class in View State

  2. student _objStudent = new student();

  3. _objStudent.AddStudent(2, "Abhijit");

  4. ViewState["StudentObject"] = _objStudent;
  5. //Retrieve Student information view state

  6. student _objStudent;

  7. _objStudent = (student)ViewState["StudentObject"];

怎么跟踪view
state信息?


如果想跟踪view
state信息, 通过Page指令的Trace属性为true。

  1. <%@ Page Language="C#" Trace="true"

运行web应用程序。你将在树状控件区看到控件ID,和ViewState大小等详细信息。不要担心"Render
Size Byte" , 它是控件的大小。

启用或禁止View
State

你可以启用或禁止单个控件View
state,也可以启用或禁止页面级别的View State.设置控件EnableViewState属性false,可以关掉单个控件的View
State.例如:

  1. TextBox1.EnableViewState =false;

通过Page指令的EnableViewState属性为false.关闭整个页面的View
State.

  1. <%@ Page Language="C#"  EnableViewState="false"

即使禁止了整个页面的View
State.你将看到在隐藏的view state标签中仍然保存少量信息。这是因为ASP.NET一直最少量的保存控件的层级关系信息。即使View
State被关闭了。

为了启动View
State,你需要把相应的数据设置为True.下面是一个启动单个控件View State的例子:

  1. TextBox1.EnableViewState =true;

启动页面级别ViewState的例子:

  1. <%@ Page Language="C#"  EnableViewState="true"

怎么保证View
State的安全性?

我已经说了View
State信息是以Base64字符串编码保存在隐藏域中。它看起来象:

许多ASP.NET程序员以为这是被加密的格式。我再说一次,这不是加密的字符串,它很容易被破解。为了确保View
State的安全,可以进行两个设置:
   
*      首先,你要确保View State信息使用"hash code"防干扰的。 可以通过Page指令
EnableViewStateMAC属性为true. MAC 代表"Message Authentication Code"

  1. <%@ Page Language="C#" EnableViewState="true" EnableViewStateMac="true"

hash
code(保密性强的校验)由ASP.NET计算出。被附加到View
State内容中保存于隐藏域。再下次PostBack时,那个校验码被验证。如果有错误,Post
Back将被拒绝,我们也可以再web.config中设置该属性。

   
*     
第二个设置是:通过Page指令ViewStateEncryptionMode属性为Always。这将加密View
State数据。如下设置:

  1. <%@ Page Language="C#" EnableViewState="true" ViewStateEncryptionMode="Always"

ViewStateEncryptionMode
有三个可选项:

   
* Always
    * Auto
    * Never
Always意味着View
State一直被加密。Never意味者从来不加密。Auto意味着对特别指定的控件加密,该控件必须调用Page.RegisterRequiresViewStateEncryption()方法请求加密。

也可以在web.config中设置
"EnableViewStateMAC" 和 ViewStateEncryptionMode"

  1. <system.web>

  2. <pages viewStateEncryptionMode ="Always"

  3. enableViewStateMac ="true"/>

  4. </system.web>

注意
: 避免不必要的加密。因为这导致性能问题。

一些重要点



























问题 回答
客户端还是服务器端 客户端
是否使用服务器资源
是否易于实现
是否有性能问题 对于大数据,加密,解密会有
支持加密解密? 支持
能存储对象? 可以。但需要在类上加serialize关键字
会超时吗? 不会

什么是
view state?

View
State是客户端状态管理重要机制之一。当页面PostBack(向服务器发送或获得数据)时,它能存储页面的值。
ASP.NET把View
State属性作为页面面内置的结构。当多个请求相同的页面时自动存储数据。

例子:

如果你向加一个变量到View
State,

  1. ViewState["Var"]=Count;

从View
State返回数据

  1. string Test=ViewState["TestVal"];

在返回数据时,经常我们需要对ViewState中的值进行类型转换

view
state有那些好处?

* 易于实现
    *
不需要服务器资源
    * 可增强安全性
,它能被压缩或编码。

view
state有那些缺点?

* 如果保存比较大的数据,将增加性能开销。因为它和页面相关。
    *
如果它把数据以散列格式存放在隐藏域中,容易被捕获
    * 在移动设备中不被支持。

什么时候使用view
state?

当你选择View
State作为维护页面状态的机制时,应该记住下面几点:

   
* 数据应该比较小,因为数据和页面控件绑定。数据量大,导致性能开销多大。
    * 避免在view
state存储安全要求高的数据。

什么时候避免使用view
state?

在下列情况下,控件不需要view
state:

   
* 控件从不改变
    *
控件每次PostBack重新构建
    *
控件时input类型,只有用户才能改变

view
state存在那里?

View
State把页面控件的值散列,编码为一个字符串。它仅包含页面和控件信息。它和服务器没有交互。它一直保存在客户端浏览器的页面里。ViewState使用隐藏域保存这些编码后的信息。
假想你写一段简单的代码,保存控件的值:

  1. ViewState["Value"] = MyControl.Text;

运行应用程序,在浏览器,右键
> 查看源文件。 你将得到下面代码块。

值看起来向被加密的字符串。这是Base64编码。这不是加密字符串,所以易于解码。

在view
state怎么存储对象?

我们能容易的存储一个对象,就像存储字符串,和int类型的变量。但我们需要把它转为字节流,因为ViewState存储数据在页面隐藏域中。所以我们需要序列化。如果要存放在view
state中的数据没有被序列化,将出现错误。

  1. [Serializable]

  2. public class student

  3. {

  4. public int Roll;

  5. public string Name;

  6. public void AddStudent(int intRoll,int strName)

  7. {

  8. this.Roll=intRoll;

  9. this.Name=strName;

  10. }

  11. }

把类student的对象存储在view
state.

  1. //Store Student Class in View State

  2. student _objStudent = new student();

  3. _objStudent.AddStudent(2, "Abhijit");

  4. ViewState["StudentObject"] = _objStudent;
  5. //Retrieve Student information view state

  6. student _objStudent;

  7. _objStudent = (student)ViewState["StudentObject"];

怎么跟踪view
state信息?


如果想跟踪view
state信息, 通过Page指令的Trace属性为true。

  1. <%@ Page Language="C#" Trace="true"

运行web应用程序。你将在树状控件区看到控件ID,和ViewState大小等详细信息。不要担心"Render
Size Byte" , 它是控件的大小。

启用或禁止View
State

你可以启用或禁止单个控件View
state,也可以启用或禁止页面级别的View State.设置控件EnableViewState属性false,可以关掉单个控件的View
State.例如:

  1. TextBox1.EnableViewState =false;

通过Page指令的EnableViewState属性为false.关闭整个页面的View
State.

  1. <%@ Page Language="C#"  EnableViewState="false"

即使禁止了整个页面的View
State.你将看到在隐藏的view state标签中仍然保存少量信息。这是因为ASP.NET一直最少量的保存控件的层级关系信息。即使View
State被关闭了。

为了启动View
State,你需要把相应的数据设置为True.下面是一个启动单个控件View State的例子:

  1. TextBox1.EnableViewState =true;

启动页面级别ViewState的例子:

  1. <%@ Page Language="C#"  EnableViewState="true"

怎么保证View
State的安全性?

我已经说了View
State信息是以Base64字符串编码保存在隐藏域中。它看起来象:

许多ASP.NET程序员以为这是被加密的格式。我再说一次,这不是加密的字符串,它很容易被破解。为了确保View
State的安全,可以进行两个设置:
   
*      首先,你要确保View State信息使用"hash code"防干扰的。 可以通过Page指令
EnableViewStateMAC属性为true. MAC 代表"Message Authentication Code"

  1. <%@ Page Language="C#" EnableViewState="true" EnableViewStateMac="true"

hash
code(保密性强的校验)由ASP.NET计算出。被附加到View
State内容中保存于隐藏域。再下次PostBack时,那个校验码被验证。如果有错误,Post
Back将被拒绝,我们也可以再web.config中设置该属性。

转载:http://www.it118.org/specials/321869dd-98cb-431b-b6d2-82d973cd739d/86b6adb6-fd7e-48ed-975a-1c262c586202.htm

*     
第二个设置是:通过Page指令ViewStateEncryptionMode属性为Always。这将加密View
State数据。如下设置:

  1. <%@ Page Language="C#" EnableViewState="true" ViewStateEncryptionMode="Always"

ViewStateEncryptionMode
有三个可选项:

   
* Always
    * Auto
    * Never
Always意味着View
State一直被加密。Never意味者从来不加密。Auto意味着对特别指定的控件加密,该控件必须调用Page.RegisterRequiresViewStateEncryption()方法请求加密。

也可以在web.config中设置
"EnableViewStateMAC" 和 ViewStateEncryptionMode"

  1. <system.web>

  2. <pages viewStateEncryptionMode ="Always"

  3. enableViewStateMac ="true"/>

  4. </system.web>

注意
: 避免不必要的加密。因为这导致性能问题。

一些重要点



























问题 回答
客户端还是服务器端 客户端
是否使用服务器资源
是否易于实现
是否有性能问题 对于大数据,加密,解密会有
支持加密解密? 支持
能存储对象? 可以。但需要在类上加serialize关键字
会超时吗? 不会

ViewState探索,布布扣,bubuko.com

时间: 2024-10-08 22:13:37

ViewState探索的相关文章

Session深度探索

什么是Session? web是无状态,这意味着每次页面被回传到服务器时,都重新生成一个web页面类的一个新的实例.众所周知http时无状态的协议.它不能获得客户端的信息.如果用户录入了一些信息,当跳转到下一个页面时,数据丢失,再也不能获得那些数据.我们需要保存这些数据,Session提供了一种把这些信息保存在服务器内存中的一种方式.它能存储各种数据类型包括自定义对象.每个客户端的Session是独立存储. 用session做状态管理是asp.net最好的特性之一.因为它是安全的,对用户透明,能

GLSProv WebUI Framework 探索阶段成果所得(1)

作为我的处子随笔,我就凭着我所想到的记录一下这段时间探索我所做的这个Feature的历程以及所学,所感. 先说一下背景,Provisiong一直是我们COM组项目里比较重要的配置环节,诞生10来年,一直是Java Swing作为主要的GUI界面,配合后台的OMCP Server 与网元以及数据库打交道.自从COM web 化以来,Swing Gui 从纯Java 演变为了WEB Swing, 但是本质上并没有什么变化, 较差的客户体验一直让老美不爽,所以经"董事会"们开会研究,先拿规模

使用Visual Studio快速开发STM32F4-Discovery探索板入门

本本将主要介绍如何使用Visual Studio创建一个基于STM32F4-Discovery探索板的简单工程. 本文使用以下硬件和软件: ●      Microsoft Visual Studio ●      VisualGDB ●      STM32F4-Discovery探索板 我们将创建一个简单的“LED闪烁”的工程,然后进行构建,并使用调试器进行单步调试. 1.    启动Visual Studio.选择File-> New-> Project. 2.    选择VisualG

数据探索

一.查看数据 首先,我们查看iris数据集的大小和结构,其维度和名称分别使用函数dim()和names()获取. 函数str()和attributes()返回数据的结构和属性 二.单变量分析 > head(iris) Sepal.Length Sepal.Width Petal.Length Petal.Width Species1 5.1 3.5 1.4 0.2 setosa2 4.9 3.0 1.4 0.2 setosa3 4.7 3.2 1.3 0.2 setosa4 4.6 3.1 1.

地统计分析笔记——探索数据

来自:http://blog.csdn.net/kikitamoon/article/details/49925147 在执行地统计分析之前,浏览.熟悉.检查自己的数据是至关重要的.绘制和检查数据是地统计分析过程中的必要阶段,我们可以从这些工作中获得一些先验知识,指导后续的工作. Stage 1 绘制数据 通过ArcMap的图层渲染方案绘制数据,我们可以获得对数据的第一印象. 例如,使用单一符号渲染了解采样点的疏密分布,通过分类渲染了解采样点高值低值的分布,等等. Stage 2 检查数据 绘制

C++随笔:.NET CoreCLR之GC探索(2)

首先谢谢 @dudu 和 @张善友 这2位大神能订阅我,本来在写这个系列以前,我一直对写一些核心而且底层的知识持怀疑态度,我为什么持怀疑态度呢?因为一般写高层语言的人99%都不会碰底层,其实说句实话,我以前也不看这些东西,只是因为自己觉得对C++感兴趣,索性乱写点东西,如果有写得不好的地方,还请上面2位大神指出. 其实我现在虽然写的是C++,但是我打算在后面把C++和.NET的一些基础类库融合起来,我发现写CLR的文章特别少,不知道什么原因.反正,废话不多,开始今天的写作吧,今天依然是把重点集中

探索Oracle之数据库升级二 11.2.0.3升级到11.2.0.4完整步骤

探索Oracle之数据库升级二  11.2.0.3升级到11.2.0.4完整步骤 说明:         这篇文章主要是记录下单实例环境下Oracle 11.2.0.1升级到11.2.0.3的过程,当然RAC的升级是会有所不同.但是他们每个版本之间升级步骤都是差不多的,先升级Database Software,再升级Oracle Instance. Oracle 11.2.0.4的Patchset No:19852360下载需要有Oracle Support才可以.  Patchset包含有7个

[ 测试思维 ] 探索式软件测试

非常不错的关于探索式软件测试的学习资料 1.探索式测试简析 作者:微软 史亮 http://pan.baidu.com/s/1c2D4tAo 2.探索式测试白皮书 作者:淘宝 季哥 http://pan.baidu.com/s/1qYFNG3y

探索 ConcurrentHashMap 高并发性的实现机制

简介 ConcurrentHashMap 是 util.concurrent 包的重要成员.本文将结合 Java 内存模型,分析 JDK 源代码,探索 ConcurrentHashMap 高并发的具体实现机制. 由于 ConcurrentHashMap 的源代码实现依赖于 Java 内存模型,所以阅读本文需要读者了解 Java 内存模型.同时,ConcurrentHashMap 的源代码会涉及到散列算法和链表数据结构,所以,读者需要对散列算法和基于链表的数据结构有所了解. Java 内存模型 由