状态时某一类型的数据在一定时期内保持活跃的信息。这里说的一定时期可以使整个应用程序的生命周期,可以使用户操作程序的时间,当然也可以是单个页面的生命周期等。
   为了解决传统Web编程中固有的限制,ASP.NET提供了按页面保留数据和在整个应用程序范围内保留数据的功能,这些具体功能如下:(其中1到5是以不同方式将数据存储到客户端上,6到8是将数据存储到服务器上的内存中)
  一、视图状态
  ViewState属性提供一个字典对象,用于在对同一页的多个请求之间保留值。它是页用来在往返行程之间保留页和控件属性值的默认方法。
  当将页面回发至服务器时,页面会在页的初始化阶段分析视图状态字符串,和原页中的属性信息。也可以使用视图状态来存储值。
  视图状态提供了特定ASP.NET页的状态信息。如果需要在多个页上使用信息,或者如果需要在访问网站时保留信息,则应当使用另一个方法(如应用程序状态、会话状态或个性化设置)来维护状态。
  注意:视图状态信息将序列化为XML,然后使用Base64编码进行编码,这将生成大量的数据。将页回发到服务器时,视图状态的内容将作为页面回发信息的一部分发送。如果视图状态包含大量信息,则会影响页的性能。
在某些情况下(如数据驱动页在每次回发时从数据存储区进行刷新),应当关闭视图状态以移除由数据控件(如GridView控件)生成的大量隐藏字段。
   换句话说,我们要尽量避免在前台使用视图状态,如果可能的话,可以用input的控件,这样可以提高网站的性能。
   存储在视图状态中的数据类型如下:字符串、整数、布尔值、Array对象、Arraylist对象、哈希表、自定义类型转换器。
   使用视图状态具有以下3个优点:
  一、耗费的服务器资源较少(与Application、Session相比):因为,视图状态数据都写入了客户端计算机中。
  二、易于维护:在默认情况下.NET系统自动启用对控件状态数据的维护。
  三、增强的安全功能:视图状态中的值经过哈希计算和压缩,并且针对Unicode实现进行编码,其安全性要高于使用隐藏域。
  使用视图状态具有以下3个缺点:
  一、性能注意事项:如果存储较大的值,用户显示页和发送页时的速度减慢。
  二、设备限制:移动设备可能没有足够的内存容量来存储大量的视图状态数据。
  三、潜在的安全风险:视图状态存储在页上的一个或多个隐藏域中。虽然视图状态以哈希表格式存储数据,但它可以被篡改。
加密视图状态:在@ Page指令中,将ViewStateEncryptionMode属性设置为

<% @Page ViewStateEncryptionMode="Always"... %>

  二、控件状态
  三、隐藏域
  ASP.NET允许将信息存储在HiddenField控件中,此控件将呈现为一个标准的HTML隐藏域。隐藏域在浏览器中以不可见的形式呈现,但可以像对待标准控件一样设置其属性。
  当向服务器提交页面时,隐藏域的内容将在HTTP窗体集合中随同其它控件的值一起发送。隐藏域可用作一个储存库,可以将存储到页中的任何特定于页的信息放置其中。

  四、客户端Cookie
  Cookie可以保存少量的数据,这些数据或者存储在客户端文件系统的文本本件中或者存储在客户端浏览器会话的内存中。
  当浏览器请求某页面时,客户端会将Cookie中的信息连同请求信息一起发送。服务器可以读取Cookie并提取它的值。
  用法如下:
第一种存储:

//HttpCookie hc = new HttpCookie("user");//创建Cookie对象
//hc["Name"]=TextBox1.Text;
//hc["Pwd"] = TextBox2.Text;
//hc.Expires=DateTime.Now.AddDays(1);
            //设置Cookie的过期时间(在现在的时间上加,如果删除,则加一个负数)
//Response.Cookies.Add(hc);

第二种存储:

//直接指定Cookie对象
//Response.Cookies["user"]["Name"] = TextBox1.Text;
//Response.Cookies["user"]["Pwd"] = TextBox2.Text;
//Response.Cookies["user"].Expires = DateTime.Now.AddDays(1);
(注:存储时,都用的是Response)
接收时:用Request接收
//if(Request.Cookies["user"]!=null)
//{
// Response.Write("用户名:"+Request.Cookies["user"]["Name"]+"<br/>");
// Response.Write("密码:"+Request.Cookies["user"]["Pwd"]);
//}

  五、查询字符串
  查询字符串是在页面URL的结尾附加的信息。
  查询字符串提供了一种维护状态信息的方法,这种方法很简单,但是有使用上的限制。利用查询字符串功能可以很容易地将信息从一个页面传送到另一个页面。
用法如下:
传递时:在URL后加?

if (Request.Form["TextBox1"] != "")
{
Response.Redirect("Main.aspx?username="+Request.Form["TextBox1"]);
}

接收时:用Request

<%= Request["username"]%>

  以下是基于服务器的状态管理:
  六、应用程序状态
  ASP.NET允许使用应用程序状态来保存每个活动的Web应用程序的值,应用程序状态是HttpApplicationState类的一个实例。
  应用程序状态存储在一个键/值字典中,在每次请求一个特定的URL期间都会创建这样一个字典。可以将特定于应用程序的信息添加到此结构以在页请求期间存储它。一旦将应用程序特定的信息添加到应用程序的状态中,服务器就会管理该对象。

  七、会话状态(Session)
  ASP.NET允许使用会话状态保存每个活动的Web应用程序的会话值,会话状态是HttpSessionState类的一个实例。
  会话状态与应用程序状态相似,不同的是会话状态的范围限于当前的浏览器会话。如果有不同的用户在使用应用程序,则每个用户会话都将有一个不同的会话状态。

  八、配置文件属性
  ASP.NET提供了一个称为配置文件属性的功能,可以存储特定于用户的数据。此功能与会话状态类似,不同的是,在用户的会话过期时,配置文件数据不会丢失。
  若要使用配置文件属性,必须对配置文件提供程序进行配置。ASP.NET包括一个SqlProfileProvider类,使你能够将配置文件数据存储到SQL数据库中,但你也可以创建自己的配置文件提供程序类,用于以自定义格式将配置文件数据存储到自定义存储机制,

转载于:https://www.cnblogs.com/waw/archive/2011/09/01/2162643.html

一起谈.NET技术,ASP.NET的状态管理相关推荐

  1. 【转】Asp.net控件开发学习笔记整理篇 - Asp.net客户端状态管理

    最近一直在做MVC项目,对于WEBFORM 好像快忘记了.周末无聊,顺带看看他人的笔记.再次温习下. 复习大纲: 导航.页面生命周期及其它导论 一.服务器控件生命周期 二.控件开发基础 三.Asp.n ...

  2. ASP.NET的状态管理

    ASP.NET的状态管理  状态时某一类型的数据在一定时期内保持活跃的信息.这里说的一定时期可以使整个应用程序的生命周期,可以使用户操作程序的时间,当然也可以是单个页面的生命周期等.  为了解决传统W ...

  3. asp.net 的状态管理

    状态管理 (state management) 在Web应用程序中,一向是很重要的课题,良好的状态管理可以帮助开发人员发展出具有状态持续能力的应用程序(像是工作流程型应用程序或是电子商务应用程序),但 ...

  4. 【分析总结】ASP.NET中的状态管理原理

    HTTP协议是介于请求.响应的断开时网络协议,与连接式的网络协议不同,例如,与我们熟悉的TCP协议相比,客户端与服务器并没有持续的连接存在,在每一次会话之后,连接都会被断开,在下一次请求的时候客户端会 ...

  5. 【转】【C#.NET】ASP.NET状态管理之一:Cookie

    [C#.NET]ASP.NET状态管理之一:Cookie 状态管理是你对同一页或不同页的多个请求维护状态和页信息的过程.与所有基于 HTTP 的技术一样,Web 窗体页是无状态的,这意味着它们不自动指 ...

  6. ASP.NET状态管理之十三(总结)

    状态管理是您对同一页或不同页的多个请求维护状态和页信息的过程.与所有基于 HTTP 的技术一样,Web 窗体页是无状态的,这意味着它们不自动指示序列中的请求是否全部来自相同的客户端,或者单个浏览器实例 ...

  7. ASP.NET状态管理之六(缓存Cache)

    ASP.NET状态管理之六(缓存Cache) ASP.NET 为您提供了一个强大的.便于使用的缓存机制,用于将需要大量服务器资源来创建的对象存储在内存中.缓存这些类型的资源会大大改进应用程序的性能. ...

  8. ASP.NET状态管理之一(概括篇)

    每次将网页发送到服务器时,都会创建网页类的一个新实例.在传统的Web编程中,这通常意味着在每一次往返行程中,与该页及该页上的控件相关联的所有信息都会丢失.例如,如果用户将信息输入到文本框,该信息将在从 ...

  9. 浅谈Hybrid技术的设计与实现【转】

    https://www.cnblogs.com/yexiaochai/p/4921635.html 前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术 ...

  10. ASP.NET状态管理详解,让你明明白白

    开发WinFrom的程序员可能不会在意维护应用程序的状态,因为WinFrom本身就在客户端运行,可以直接在内存中维护其应用程序状态.但ASP.NET应用程序在服务器端运行,客户端使用无状态的http协 ...

最新文章

  1. apizza接口文档传二维数组
  2. core-js@2 core-js@3报错问题
  3. android 布局点击效果,如何让LinearLayout也有类似Button的点击效果?
  4. mysql如何修改所有的definer
  5. 为了搞清楚CDN的原理,我头都秃了...
  6. 离开载具_迷你世界 自制火箭试飞成功 飞行载具不负众望
  7. 《玩转Django2.0》读书笔记-编写URL规则
  8. 快来,这里不仅有帅哥,还有美女!!
  9. 超硬核!只要1美元!教你给MacBook装上触摸屏
  10. 无纸化办公中如何保护数据安全
  11. 互联网大厂校招大战:华为研究生年薪最高到45万,腾讯offer数增四成
  12. RINEX3文件中的toc,toe,IODE
  13. mysql-proxy之奇虎360 Atlas 安装实现mysql读写分离
  14. LeetCode程序员面试金典(第 6 版)中
  15. ElementUI 中 栅格布局 混乱问题
  16. 岳阳的第一场雪,我这辈子的第一场雪。
  17. python:cv2.VideoCapture().get()/.set()及cv2.VideoWriter_fourcc()
  18. 硬盘活动分区(将磁盘分区标为活动或取消活动的方法)(转)
  19. MathType 如何安装成功以及如何导入word
  20. jbpm创建流程图_jbpm - 工作流的基本操作

热门文章

  1. 面试相关——计算机网络基础
  2. mysql能将查询结果与表左查询_mysql重点,表查询操作和多表查询
  3. 多线程中redistemplate不执行_在 Flink 算子中使用多线程如何保证不丢数据?
  4. echarts设置标题样式_Pyecharts 全局配置项之标题配置项
  5. 网络驱动器映射成功但无法更新文件_FTP映射网络驱动器-ExpanDrive for mac
  6. thymeleaf 消息推送_SpringBoot整合WebSocket实现消息推送
  7. 计算机的原理 组成 分类及应用,计算机组成原理试卷A卷及答案
  8. 都昌信息袁永福:利用电子病历赋能框架,为健康医疗大数据打好基础【电子病历和健康医疗大数据系列】...
  9. 网络爬虫之Xpath用法汇总
  10. kubernetes 升级到1.6