基本理论:

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.

本文关于:asp.netViewState用法

Session,ViewState用法的更多相关文章

  1. Asp.net中的ViewState用法

    Session,ViewState用法基本理论:session值是保存在服务器内存上,那么,可以肯定,大量的使用session将导致服务器负担加重. 而viewstate由于只是将数据存入到页面隐藏控 ...

  2. thinkPHP中session()方法用法详解

    本文实例讲述了thinkPHP中session()方法用法.分享给大家供大家参考,具体如下: 系统提供了Session管理和操作的完善支持,全部操作可以通过一个内置的session函数完成. 用法 ? ...

  3. 转载ASP.NET 状态管理Application,Session,Cookie和ViewState用法

    转载原地址 http://www.cnblogs.com/cuishao1985/archive/2009/09/24/1573403.html ASP.NET状态管理 APPlication,Ses ...

  4. 数据库的修改和删除;比较标签代替<,>,=号;模板替换;session的用法

    注: 1.session:系统默认开启;用途:防止跳过登录(只能访问登录方法);session和cookie的用法(手册->专题); 赋值:session('name','value'); 取值 ...

  5. session cookie用法

    1.session(1)session存储在服务器的(2)session每个人存一份(3)session有默认的过期时间(4)session里面可以存储任意类型的数据安全,对服务造成压力用法:1.当一 ...

  6. cookie,session,viewstate

    viewstate的原理是隐藏域. protected void Page_Load(object sender, EventArgs e) { ViewState["v1"] = ...

  7. C#中Session的用法详细介绍

    Session模型简介 在学习之前我们会疑惑,Session是什么呢?简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站.当每 个用户首次 ...

  8. session 的用法

    </head> <body> <?php //session_start();//开启session,必须写在PHP代码最顶端 //HTTP,无状态性 //记录登陆者状态 ...

  9. php里session的用法

    PHP中的session默认情况下是使用客户端的Cookie.当客户端的Cookie被禁用时,会自动通过Query_String来传递. Php处理会话的函数一共有11个,我们详细介绍一下将要用到几个 ...

随机推荐

  1. Android推送通知指南

      Android推送通知指南 在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,可是 ...

  2. Linux修改文件时候出现崩溃,产生了一个.swap交换文件,如何修复?

    有时候在用vim打开文件时提示类似以下的信息: E325: 注意 发现交换文件 ".exportcert.cpp.swp" 所有者: liuchuanliang    日期: Th ...

  3. Selenium WebDriver + Grid2 + RSpec之旅(六) ----多浏览器的并行执行

    Selenium WebDriver + Grid2 + RSpec之旅(六) ----多浏览器的并行执行 由于浏览器的发展,浏览器种类繁多.为了保证系统能在各种浏览器上叱咤风云,减少测试人员的测试工 ...

  4. MySQL数据库的优化-运维架构师必会高薪技能,笔者近六年来一线城市工作实战经验

    原文地址:http://liangweilinux.blog.51cto.com/8340258/1728131 首先在此感谢下我的老师年一线实战经验,我当然不能和我的老师平起平坐,得到老师三分之一的 ...

  5. Cocos2d-x java 通过jni调用c++的方法

    前面博客说到,cocos2d-x c++界面层运行在一个GLThread线程里面,严格的说是运行在Cocos2dxGLSurfaceView(继承自GLSurfaceView) 里面.opengl的渲 ...

  6. fopen\fread\fwrite\fscanf\fprintf\fseek\feof\rewind\fgets\fputc等系列函数使用总结

    转载自:http://blog.csdn.net/xidianzhimeng/article/details/23541289 1 fopen 函数原型:FILE * fopen(const char ...

  7. cuda(1) 最大并发量

    Created on 2013-8-5URL : http://blog.sina.com.cn/s/blog_a502f1a30101mi6t.html@author: zhxfl转载请说明出处 c ...

  8. Area - POJ 1654(求多边形面积)

    题目大意:从原点开始,1-4分别代表,向右下走,向右走,向右上走,向下走,5代表回到原点,6-9代表,向上走,向左下走,向左走,向左上走.求出最后的多边形面积. 分析:这个多边形面积很明显是不规则的, ...

  9. 341. Flatten Nested List Iterator

    List里可以有int或者List,然后里面的List里面可以再有List. 用Stack来做比较直观 Iterator无非是next()或者hasNext()这2个方程 一开始我想的是hasNext ...

  10. Spring实例化bean的三种方法

    1.用构造器来实例化 <bean id="hello2" class="com.hsit.hello.impl.ENhello" /> 2.使用静态 ...