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到第三方的应用中。
昨天看到一个文章,作者在自己的页面中定义了几个全局变量,类型是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页面中必须有一个服务器端窗体标记(<form runat=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才是持续的.
10.将一个页面的控件传输到另外一个页面(第二个页面)时,通常会出现错误。解决方法是在第二个页面中将viewstate禁用。
启用和禁止ViewState
在默认情况下,所有服务器控件的viewstate开启状态,通过以及几种途径来禁止。
1.页面级别
2.控件级别
3.应用程序级别
4.机器级别
页面级别禁止的方法是在页面的开始写入
<%@ Page EnableViewState ="False" %>
or
<%@ Page EnableViewState ="True" %>
控件级别是
<asp:TextBox id="txtCode" runat="server” EnableViewState="false" />
or
<asp:TextBox id="
txtCode" runat="server" EnableViewState="true" />
程序级别是在web.config中
<pages enableViewState="
false" />
or
<pages enableViewState="
true" />
机器级别是在machine.config中<pages enableViewState="
true" enableViewStateMac="true" ... />
or
<pages enableViewState="
false" ... />
在viewstate中保存和取出值
viewstate能处理以下的类型
基本类型,基本类型数组,ArrayList 和Hashtable,任何可以序列化的对象。
以下代码是将ArrayList存到viewstate中并取出
ArrayList obj = new ArrayList();
//Some code
ViewState["
ViewStateObject"] = obj;
obj = ViewState["
ViewStateObject"];

转载于:https://www.cnblogs.com/zxj159/articles/2428404.html

Session,ViewState用法相关推荐

  1. 详述ViewState用法

    与刚接触ASP.NET页面的开发人员交谈时,他们通常向我提出的第一个问题就是:"那个ViewState到底是什么?"他们的语气中流露出的那种感觉,就象我来到一家异国情调的餐馆,侍者 ...

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

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

  3. c中session的用法

    c中session的用法你知道吗?下面小编就跟你们详细介绍下c中session的用法,希望对你们有用. c中session的用法如下: Session的基本属性: 一.属性 1.SessionID S ...

  4. php中sisson用法,详细介绍php中session的用法

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

  5. Session ,ViewState,以及接收其它网页传过来的值的使用

    1.Session 为全局变量,一般用于存放跨页面的值,例如可以用于登陆和判断是否登录 定义和赋值: string UserName = UserName.Text;             Sess ...

  6. Flask中的session简易用法教程,以及permanent通俗解释

    总有各种高大上的用法,但是实际写起来就是那么两三行,直接上demo: from datetime import timedelta from flask import Flask,sessionapp ...

  7. CI类实现session基本用法

    首先修改配置文件(config.php) //生成一个随机不重复的字符串走位加密的key保存到config.php的encryption_key中 $config['encryption_key']= ...

  8. session 的用法

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

  9. session set()用法php,PHP 使用 session_set_save_handler()

    PHP 使用 session_set_save_handler() 对 Session 进行自定义处理 /* Session open (called by session_start( )) Ses ...

最新文章

  1. 利用非递归方法实现二叉树的中序遍历
  2. Mybatis的insert方法
  3. WTMPlus 1.1 发布
  4. java bigDecimal and double
  5. linux input/output error
  6. 九九乘法表--0702
  7. 《Reids 设计与实现》第十七章 发布与订阅
  8. c语言中保存到文件中,急求如何将下列C语言程序数据存储到文件中?
  9. CSS3过渡、变形和动画
  10. 笔试题:简述以下两个for循环的优缺点
  11. 复制pdf里的文字,去掉多余换行符的最简单方法(不用word不用python)
  12. Altium Designer安装教程,适合小白的一键安装,简单明了,傻瓜式安装
  13. 小学计算机社团团长职责,社团团长小学作文
  14. 腾讯云服务器从购买到搭建tomcat
  15. PC上网页端屏蔽知乎上的视频
  16. maya 中切换当前渲染器的方法和设置
  17. 使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云
  18. Object.assign是什么意思啊?
  19. 生产者消费者模式三种实现方式
  20. 豆瓣评分8.9,这本Python经典入门书重磅升级

热门文章

  1. Redis 笔记(11)— 文本协议 RESP(单行、多行字符串、整数、错误、数组、空值、空串格式、telnet 登录 redis)
  2. python系统问题
  3. window10+python3.7安装tensorflow--gpu tensorflow 安装
  4. Debug常用指令和DOSBox使用步骤
  5. 原子层沉积(ALD)和化学气相沉积(CVD)微电子制造铜金属化的研究进展
  6. XGBoost4J-Spark基本原理
  7. AI框架外部用户贡献代码
  8. 多尺度目标检测 Multiscale Object Detection
  9. 通过Mellanox ConnectX NIC使用XDP加速
  10. ADAS虚拟车道边界生成