`
uule
  • 浏览: 6352819 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

Session.ViewState用法

 
阅读更多

基本理论:
session值是保存在服务器内存上,那么,可以肯定,大量的使用session将导致服务器负担加重. 而viewstate由于只是将数据存入到页面隐藏控件里,不再占用服务器资源,因此, 我们可以将一些需要服务器"记住"的变量和对象保存到viewstate里面. 而sesson则只应该应用在需要跨页面且与每个访问用户相关的变量和对象存储上. 另外,session在默认情况下20分钟就过期,而viewstate则永远不会过期.

数据类型:
但viewstate并不是能存储所有的.net类型数据,它仅仅支持String、Integer、Boolean、Array、ArrayList、Hashtable 以及自定义的一些类型.

其他考虑
当然,任何事物都有两面性, 使用viewstate会增加页面html的输出量,占用更都的带宽,这一点是需要我们慎重考虑的. 另外, 由于所有的viewstate都是存储在一个隐藏域里面,用户可以很容易的通过查看源码来看到这个经过base64编码的值.然后再经过转换就可以获取你存储其中的对象和变量值.
其实,对于viewstate的安全性问题,asp.net还给我们提供了更多的选择.一般如果要保护viewstate有两种方式: 一种是防篡改,一种是加密. 一说到防篡改,我们就想起了使用散列代码. 没错, 我们可以在页面顶部加入如下代码:Page EnableViewStateMAC=true。这样asp.net就会自动的在viewstate中追加一个散列码,在页面回传时,服务器根据回传的viewstate生成一个散列码,再与回传的散列码相比较,如果不对,则丢弃该viewstate,同时控件将恢复初试状态. (默认情况下asp.net是通过SHA1算法而不是md5算法来生成散列,不过这个可以在machine.config里面配置machineKey validation="MD5"即可),而viewstate加密就更简单了, 只要在machine.config里设置一下machineKey validation="3DES"即可实现用des加密viewstate了.

使用方法
怎么在客户端,存取ViewState?
应用环境
一些与安全性无关,数据量较小,需要长时间操作的参数,应该用ViewState存取。

在webgis中,地图的各种相关状态,如zoom, center, layers, visibility等,用viewstate存取的话,就不存在session过期的问题,网页可以永远使用,甚至可以下载保存,在进行地图请求,或iframe到第三方的应用中。


Asp.net中的ViewState用法  
   昨天看到一个文章,作者在自己的页面中定义了几个全局变量,类型是static,但是这样的定义会存在问题,当一个用户访问的时候不会有问题,但是当大量用户并发访问系统的时候,页面中的这些static类型的全局变量就会出现问题了,然后作者改用了Session变量保存以前由static类型全局变量纪录的数据,因为Session是状态量,只是和某个访问进程相关,这样就不会出现由于static类型引起的问题了。
 但是这样的话系统中的Session就太多了,我总认为这样不太好,虽然每个一个Session都有一个ID不会冲突。ASP.NET引入了ViewState,可以记录同一个页面的不同PostBack中的一些数据值。
所以我的解决方法是:使用例如ViewState["name"]这样的形式记录以前static的全局变量,这样就可以避免这个问题了,因为我的系统是在局域网使用的,ViewState带来的多余的数据量可以忽略不计了。

asp.net ViewState用法:

ASP.NET中的ViewState是ASP.NET中用来保存WEB控件回传时状态值一种机制.

在WEB窗体(FORM)的设置为runat="server",这个窗体(FORM)会被附加一个隐藏的属性_VIEWSTATE.

_VIEWSTATE中存放了所有控件在ViewState中的状态值.

ViewState是类Control中的一个域,其他所有控件通过继承Control来获得了ViewState功能.它的类型是system.Web.UI.StateBag,一个名称/值的对象集合.

当请求某个页面时,ASP.NET把所有控件的状态序列化成一个字符串,然后做为窗体的隐藏属性送到客户端.当客户端把页面回传时,ASP.NET分析回传的窗体属性,并赋给控件对应的值.当然这些全部是由ASP.NET负责的.

定义ViewState属性
Public int PageCount
{
get{return(int)ViewState["PageCount"];}
set{ViewState["PageCount"]=value;}
}

使用ViewState的条件
如果要使用ViewState,则在ASPX页面中必须有一个服务器端窗体标记(<formrunat=server>).窗体字段是必需的,这样包含ViewState信息的隐藏字段才能回传给服务器.而且,该窗体还必须是服务器端的窗体,这样在服务器上执行该页面时,ASP.NET页面框架才能添加隐藏的字段.
Page的EnableViewState属性值为true.
控件的EnableViewState属性值为true.

提醒:
1.当存在页面回传时,不需要维持控件的值就要把ViewState禁止.
2.ViewState的索引是大小写敏感的.
3.ViewState不是跨页面的.
4.为了能包存在ViewState中,对象必须是可流化或者定义了TypeConverter.
5.控件TextBox的TextMode属性设置为Password时,它的状态将不会被保存在ViewState中,这应该是出于安全性的考虑.
6.在页面没有回传或重定向或在回传中转到(transfer)其他页面时不要使用ViewState.
7.在动态建立控件时要小心它的ViewState.
8.当禁止一个程序的ViewState时,这个程序的所有页面的ViewState也被禁止了.
9.只有当页面回传自身时ViewState才是持续的.

设置ViewState
ViewState可以在控件,页,程序,全局配置中设置.缺省情况下EnableViewState为true.如果要禁止所有页面ViewState功能,可以在程序配置中把EnableViewState设为false.

分享到:
评论

相关推荐

    Session,ViewState用法

    ### Session与ViewState用法详解 在.NET框架中,Session与ViewState是两个非常重要的概念,它们分别用于维护跨页面请求的数据状态以及保存控件状态。本文将深入探讨这两个特性,并通过具体的示例帮助读者更好地理解...

    Session Application Cookie ViewState用法

    ### Session、Application、Cookie 和 ViewState 的用法 在Web开发中,管理用户会话和状态是构建交互式网站的关键组成部分。本文将详细解释Session、Application、Cookie 和 ViewState 的概念及用法,帮助开发者更...

    session.rar

    9. **其他状态管理方式**:对比Session,还可能提到了其他状态管理方法,如Cookie、Viewstate(ASP.NET)、Hidden Field、URL重写等。 这份资料可能是对初学者或开发者的一个宝贵资源,帮助他们深入理解Session在...

    ASP.NET_Application,Session,Cookie和ViewState等对象用法和区别

    在 ASP.NET 中,Application、Session、Cookie 和 ViewState 是四种常见的对象,每种都有其特定的用途和特点。 1. **Application 对象** Application 对象用于在整个应用程序生命周期内共享数据,这包括所有用户。...

    Application,_Session,_Cookie,_Viewstate,_Cache对象用法和区别

    - 使用Cache时,如果需要更高级的功能,如依赖管理和到期通知,则需使用`Insert`或`Add`方法。 3. **示例代码** ```csharp // 添加数据到Cache HttpContext.Current.Cache.Insert("ID", "cc"); // 获取Cache...

    session、viewstate jQuery SQL存储过程等一系列教学网站 相当实用哦

    2. **使用**:在整个会话过程中,可以读取和修改Session中的数据。 3. **销毁**:通常情况下,Session会在一定时间后自动失效,也可以手动销毁。 #### 四、Session的应用场景 1. 用户登录状态管理 2. 购物车信息...

    关于ASP.NET网页中Cache, Session, and ViewState用法比较程序例子

    在"SampleCacheSessionViewState"这个程序例子中,开发者可能通过编写代码展示了如何在ASP.NET页面中使用Cache、Session和ViewState。通常,例子会包含创建和读取数据、设置过期策略、处理不同存储机制的异常情况等...

    viewstate用法

    `ViewState`是ASP.NET中用于维护Web控件在页面回发时状态的一种机制。...同时,可以考虑使用其他状态管理机制,如`Session`、`Cookie`或服务器端缓存,来替代或补充`ViewState`,以适应特定的应用场景。

    asp.net服务器端保存viewstate例子,html中不在有viewstate

    一种可能的方法是使用Session对象,它可以在服务器端存储用户的特定信息,并且在回发期间仍然可用。 以下是一个简单的示例: 1. 创建一个自定义控件,继承自`System.Web.UI.Control`,并重写`LoadViewState`和`...

    IIS7 Session的方法

    - 考虑使用ViewState、Cookie或其他技术替代Session,视场景选择最合适的存储方式。 - 定期清理不再使用的Session,防止内存泄漏。 8. **Session过期策略** 可以通过调整Web.config中的`timeout`属性或在代码中...

    Application、Session、Cookie、ViewState、Cache、Hidden的区别

    ### Application、Session、Cookie、ViewState、Cache、Hidden 的区别与应用 #### Application - **信息量大小**:可存储任意大小的数据,适用于全局共享信息,如网站计数器、配置参数等。 - **作用域和保存时间**...

    viewStateDecoder2.0

    8. 其他状态管理方法:除了ViewState,ASP.NET还提供了其他状态管理方式,如ControlState、Session、Cookie、Application以及Query String等。开发者可以根据需求选择合适的方法。 综上所述,"viewStateDecoder2.0...

    ASP.NET保存信息总结(Application,Session,Cookie,ViewState和Cache等)

    尽管使用 Application.Lock 和 Application.Unlock 方法来避免写操作的同步,但是它串行化了对 Application 对象的请求,当网站访问量大的时候会产生严重的性能瓶颈。因此最好不要用此对象保存大的数据集合。 例如...

    ViewState2

    3. 重写Page.ProcessRequest方法:自定义ViewState处理,以减少大小或提高安全性。 知识点三:其他状态管理方式 除了ViewState,ASP.NET还提供了其他状态管理方式,如: - Session:基于服务器端的会话状态,适合...

    ViewState查看工具

    通过使用工具,开发者可以定位占用空间过多的控件,并考虑是否真的需要保留其状态,或者寻找替代方法,如使用ControlState或Session来存储必要数据。 5. **控制ViewState**:ASP.NET提供了多种方式来管理ViewState...

    asp.net中ViewState的用法详解

    ### ViewState用法 1. **定义ViewState属性**:可以通过ViewState字典来存取页面或控件的状态信息。示例如下: ```csharp public int PageCount { get { return (int)ViewState["PageCount"]; } set { ...

    ASP.NET ViewState

    5. **自定义ViewState管理**:如果需要更细粒度的控制,可以通过继承`Page`类并重写`SavePageStateToPersistenceMedium`和`LoadPageStateFromPersistenceMedium`方法来自定义ViewState的存储和加载。 **移动...

Global site tag (gtag.js) - Google Analytics