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

ASP.NET的状态管理相关推荐

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

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

  2. asp.net 的状态管理

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

  3. ASP.NET 状态管理概述(MSDN)

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

  4. Asp.net控件开发学习笔记(四)---Asp.net服务端状态管理

    Asp.net请求处理构架 当一个客户端浏览器对IIS发起访问请求资源时(比如一个.aspx文件),Asp.net会初始化并维护一个包含了多个Response和Request的Http Session ...

  5. ASP.NET状态管理之三(隐藏域HiddenField)

    ASP.NET 允许您将信息存储在 HiddenField 控件中,此控件将呈现为一个标准的 HTML 隐藏域. 隐藏域在浏览器中不以可见的形式呈现,但您可以就像对待标准控件一样设置其属性. 当向服务 ...

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

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

  7. ASP.NET状态管理

    第一部分:页面状态介绍 Http协议----"无状态协议" Web服务器每分钟对上千个用户进行管理的一种方式就是执行所谓的"无状态"链接.只要有一个希望浏览器返 ...

  8. ASP.NET 状态管理概览

    页面每次被回传到服务器的时候都会创建 Web 页面类的一个新实例.在传统的 Web 开发中,这意味着在每次回传的过程中,页面中所有与页面和控件相关联的信息都将被丢失.例如,如果用户在一个文本框中输入了 ...

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

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

最新文章

  1. 无空头链表详解(增删改查)
  2. 【蓝鸥Unity开发基础三】课时14 刚体
  3. APP技巧:微信中这6个设置建议关闭,可以防止个人信息或将全暴露,赶快看一看吧!...
  4. centos7下SVN服务器搭建
  5. linux 脚本返回值
  6. Javascript综合应用小案例
  7. 简记Inception系列
  8. Android启动页欢迎界面大全 (网址)
  9. 深度解析vue.js响应式原理解析与实现
  10. 2022-2028年中国差旅管理行业市场全景调查及投资潜力研究报告
  11. 【numpy学习】numpy教程--基于莫烦python的教程
  12. GFZRNX学习教程(安装以及rinex格式转换)
  13. 苹果手机各种尺寸列表
  14. 中国现代书画家——袁晓丹、潘文兵、郑锋等
  15. HTML页面返回503状态码设置,503错误网页状态码出现原因及监控方法介绍
  16. 电脑自带office查看攻略
  17. win7制作ntp服务器,win7系统搭建ntp服务器的操作方法
  18. web前端高级必备面试资料
  19. 解决dubbo问题:forbid consumer
  20. win10开机未能正确启动_设置华硕电脑定时开机只需两步!

热门文章

  1. 第十六届全国大学生智能车竞赛线上赛点赛道审核 - 华东赛区
  2. 第十六界智能车竞赛:这问题怎么越来越多了呢?
  3. 一些信号与自己的卷积结果
  4. MIC4451驱动单管MOS,IGBT 测试实验
  5. 21世纪最需要的的七种人才 -李开复
  6. 第十六届全国大学生智能车安徽赛区承办学校参赛队伍
  7. python gui 可视化开发工具_用c语言输出九九乘法口诀表
  8. 虚拟摄像头 安卓版_林俊杰 ft. M.E.,联同视效大厂数字王国加码虚拟偶像
  9. 估计一些物品的质量_新版人教版二年级数学下册《克和千克》教案
  10. 仓库码放要求_货物码放规范