WEb程序保存状态的方式有这样几种:

1.Application:保存在Application中的数据是全局有效的;Application里面存放的应该是访问多修      改较少并且是全局至少大部分功能会使用的数据,例如计数器或者数据库连接串等。

Application.Lock();
       
((int)Application["Count"])++;
        Application.Unlock();

2.Session:在Asp.Net内部,有一个StateApplication来管理Session

3.Cookie

4.ViewState:实际上ViewState并不神秘,就是一个Hidden字段,但是他是服务器控件状态保存的基础

下面我们分别介绍这几种:

ViewState

例如:

<form name="form1" method="post" action="modi_user_info.aspx"

language="javascript" onsubmit="javascript:return WebForm_OnSubmit();"

id="form1">

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />

<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value=""

/>

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"

value="/wEPDwUKLTIzODM0NzQ5OQ9kFgICAQ9kFgRmDw8WAh4EVGV4dAUHamFzbWluZWRkAgg

PDxYCHwAFDDA1OTEwMDAwMDYxM2RkZA==" />

做过Web程序的人可能都有这种痛苦的体会,有时候为了处理页面上面比较复杂的功能,

常常会加很多Hidden,然后在服务器端用一大堆判断来分析目前的状态,写起来烦人,

写完了代码更是难看;实际上,ViewState就是帮我们系统的实现了保存控件状态的功能

,服务器端控件能够在多次请求间保存状态也全靠它。

1、ViewState是存放在客户端,因此会减轻服务器的负担,是一种比较好的保存数据的

方式。
   2、因为ViewState本身的限制,只能保存可以序列化的对象,而且最好不要放太多东

西,能省则省,以免在减慢传输的速度,以及加重服务器解析的负担。
   3、我们通过很简单的方式就可以把ViewState里面的值获取出来,我们上面讨论了一

些,虽然没有把解析的代码写出来,但是利用LosFormatter可以得到ViewState反序列

化后的对象,那么要解析出来简直是易如反掌;所以ViewState在安全性上面还是比较,建议不要

存放比较机密和敏感的信息,尽管ViewState可以加密,但是由于ViewState要保存在客

户端,天生就有安全性的隐患。
[C#]
// 保存在 ViewState
ViewState["SortOrder"] = "DESC"; 字串5

// ViewState 中读取
string sortOrder = (string)ViewState["SortOrder"];

如果要使用 ViewState,则在 ASPX 页面中必须有一个服务器端窗体标记 (<form

runat=server>)。窗体字段是必需的,这样包含 ViewState 信息的隐藏字段才能回传

给服务器。而且,该窗体还必须是服务器端的窗体,这样在服务器上执行该页面

时,ASP.NET 页面框架才能添加隐藏的字段。

在页面不回传的情况下,可以通过省略服务器端的 <form> 标记来去除页面中的

ViewState。

 Session

Session值是保存在服务器内存上的,那么,可以肯定,大量使用Session将导致服务器负担加重。另外,Session在默认情况下有一个过期期限,一般是20分钟就过期,但是ViewState则永远不会过期。

提醒:

1.一些与安全性无关,数据量较小,需要长时间操作的参数,应该用ViewState存取。

2.当存在页面回传时,不需要维持控件的值就要把ViewState禁止。

3.ViewState的索引是大小写敏感的

4.ViewState不是跨页面的。

5.控件TextBox的TExtMode属性设置为Password时,它的状态将不会被保存在ViewState中,这应该是出于安全性的考虑。

6.在页面没有回传或者重定向或在回传中转到(transfer)其他页面的时候不要使用ViewState。

7.在动态建立控件时,小心他的ViewState

8.当禁止一个程序的ViewState时,这个程序所有的页面的ViewState也被禁止了。

  下面3种方式就可以分别禁用某一个控件、某一个页面和整个应用程序的ViewState
      1) 控件禁用:将控件的EnableViewState属性设置为false; 
  2) 页面禁用:在页面的Page指令中添加EnableViewState="false";
  3) 应用程序禁用:在Web.Config文件中添加程序代码,代码如下:

<configuration>

<system.web>

<pages enableViewState="false"/>

</system.web>

< /configuration>

也可以在页面的page指令中禁用 EnableViewState="false"
有的时候我们发现ViewState不能正常传值了,可能是被禁用,再次启用就可以了!

9.只有当页面回传自身时,ViewState才是持续的。

(11)Web程序保存状态的几种方式,Application,Session,Cookie,ViewState的更多相关文章

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

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

  2. web网页 页面布局的几种方式(转)

    web网页 页面布局的几种方式 转载 2017年06月16日 12:19:40 2218 网页基本布局方式: (1)流式布局 Fluid 流布局与固定宽度布局基本不同点 就在于对网站尺寸的侧量单位不同 ...

  3. MVC web api 返回JSON的几种方式,Newtonsoft.Json序列化日期时间去T的几种方式。

    原文链接:https://www.muhanxue.com/essays/2015/01/8623699.html MVC web api 返回JSON的几种方式 1.在WebApiConfig的Re ...

  4. 设备程序远程升级采用两种方式(优先采用IP方式)

    设备程序远程升级采用两种方式(优先采用IP方式): 采用应急广播TS流传输技术规范的消息内容表携带升级包数据.当辅助数据类型值为44时,消息内容表传输的数据为程序升级包. 采用IP方式传输升级包数据. ...

  5. asp.net Core 获取应用程序所在目录的2种方式

    //获取应用程序所在目录的2种方式(绝对,不受工作目录影响,建议采用此方法获取路径).如:d:\Users\xk\Desktop\WebApplication1\WebApplication1\bin ...

  6. web 文件上传的几种方式

    问题 文件上传在WEB开发中应用很广泛. 文件上传是指将本地图片.视频.音频等文件上传到服务器上,可以供其他用户浏览或下载的过程. 以下总结了常见的文件(图片)上传的方式和要点处理. 表单上传 这是传 ...

  7. 转:三种状态对象的使用及区别(Application,Session,Cookie)

    Application状态对象 Application 对象是HttpApplication 类的实例,将在客户端第一期从某个特定的ASP.NET应用程序虚拟目录中请求任何URL 资源时创建.对于We ...

  8. web页面跳转的几种方式

    可用客户端触发或服务端触发的方式来实现页面跳转. 客户端触发 方式一:使用Javascript 利用window.location对象的href属性.assign()方法或replace()方法来实现 ...

  9. 微信小程序 - 传参的几种方式

    1. navigator navigator?第一参数&第二参数 .... 在传递页面的options可以拿到传递过来的参数 <navigator url='start-test/sta ...

随机推荐

  1. SpringBean生命周期

    Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring ...

  2. (转)如何修正DIV float之后导致的外部容器不能撑开的问题

    本文转载自:http://blog.csdn.net/qsdnet/article/details/1534005 在写HTML代码的时候,发现在Firefox等符合W3C标准的浏览器中,如果有一个D ...

  3. 【转】Apache Jmeter发送post请求

    下面用Jmeter发送一个post请求, 对应的js代码如下: $("#register_a").click(function() { var name = $("#un ...

  4. 【转】使用Jmeter录制web脚本

    1.web性能测试以及web http请求基本原理. 再介绍录制jmeter脚本之前,我们先谈一下web性能测试.web就是调用http/https接口, 其实没有是什么复杂度可言.只是我们必须清楚, ...

  5. 【转】JMeter中使用Selenium进行测试

    JMeter是使用非常广泛的性能测试工具,而Selenium是ThroughtWorks 公司一个强大的开源Web 功能测试工具.Jmeter和Selenium结合使用,就可以实现对网站页面的自动化性 ...

  6. 【转】学习使用Jmeter做压力测试(二)--压力测试的实施

    JMeter测试步骤: 1.建立测试计划 2.添加线程组 3.添加HTTP请求 4.增加监听器 5.执行测试计划 6.根据JMeter提供的报告分析结果 一.目标 测试访问目标服务器网站首页的每秒查询 ...

  7. java代码实现点击鼠标从控制台输出信息

    总结:最难的就是当我们需要点击按钮时去实现某个功能-----------因为那个我没有理解透,是涉及整个程序的 package com.a.b; import javax.swing.*; impor ...

  8. thinkphp中的多字段模糊匹配

    引言:有时候查询要匹配多个字段.比如查询地址,地址是由多个字段组成的.有省.市.区等等,以及详细地址.这个时候如何查询呢? 实现不同字段相同的查询条件 $User = M("User&quo ...

  9. Linux学习笔记 -- Shell 变量

    定义变量 语法: 变量名=值 myVal= 需要注意一下变量明德规则: 首个字符必须为字母(a-z,A-Z). 中间不能有空格,可以使用下划线(_). 不能使用标点符号. 不能使用bash里的关键字( ...

  10. jQuery UI Draggable + Sortable 结合使用

    工作中需要将一个左边的设计好的控件,拖拽到右边的面板中,同时保持右边面板中的控件自由排序,这时候就需要及支持拖拽又支持排序的操作了, Demo截图:从左边控件拖到右边区域 代码段: <scrip ...