状态是某一类型的数据在一定时期内保持活跃的信息。这里说的一定时期可以使整个应用程序的生命周期,可以使用户操作程序的时间,当然也可以是单个页面的生命周期等。
   为了解决传统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数据库中,但你也可以创建自己的配置文件提供程序类,用于以自定义格式将配置文件数据存储到自定义存储机制。

文章来源:http://kb.cnblogs.com/page/75582/

ASP.NET中的状态保持(转载)的更多相关文章

  1. ASP.NET中的状态保持

    1.ASP.NET中的状态保持解决方案 2.常用的状态报保持方式 view state  ASP.Net的.aspx页面特有,页面级的,就是在页面上的一个隐藏域中保存客户端单独使用的数据的一种方式(b ...

  2. 转:ASP.NET中的SESSION实现与操作方法

    在ASP.NET中,状态的保持方法大致有:ApplicationState,SessionState,Cookie,配置文件,缓存. ApplicationState 的典型应用如存储全局数据. Se ...

  3. Asp.net 中ViewState,cookie,session,application,cache的比较

    Asp.net 中的状态管理维护包含ViewState,cookie,session,application,cache五种方式,以下是它们的一些比较: 1.存在于客户端还是服务端 客户端: view ...

  4. 转载MSDN 在ASP.NET 中执行 URL 重写

    转载文章原网址 http://msdn.microsoft.com/zh-cn/library/ms972974.aspx 摘要:介绍如何使用 Microsoft ASP.NET 执行动态 URL 重 ...

  5. 【转载】ASP.NET中Server.MapPath方法获取网站根目录总结

    在ASP.NET网站应用程序中,可以通过Server.MapPath方法来获取跟服务器有关的目录信息,如获取网站的根目录.获取当前代码文件所在的目录路径.获取当前代码所在路径的上级路径等.Server ...

  6. 【转载】Asp.Net中使用基于jQuery的javascript前台模版引擎JTemplate

    JTemplate是基于jQuery的开源的前端模版引擎,在Jtemplate模板中可以使用if判断.foreach循环.for循环等操作,使用Jtemplate模板优点在于ajax局部刷新界面时候不 ...

  7. 【转载】Asp.Net中Cookie对象的作用以及常见属性

    Cookie对象是服务器为用户访问存储的特定信息,这些信息一般存储在浏览器中,服务器可以从提交的数据中获取到相应的Cookie信息,Cookie的最大用途在于服务器对用户身份的确认,即票据认证,用户会 ...

  8. 【转载】Asp.Net中应用程序的事件响应次序

    Asp.Net应用程序事件响应次序是指Application事件的相应次序,涉及到的事件包括Application_Start事件.BeginRequest事件.AuthenticateRequest ...

  9. asp.net中的<%%> <%#%> <%=%>形式的详细用法 (转载)

    博客分类: ASP.NET   一. <%%>这种格式实际上就是和asp的用法一样的,只是asp中里面是vbscript或者javascript代码,而在asp.net中是.net平台下支 ...

随机推荐

  1. [ActionScript 3.0] AS3 深入理解Flash的 应用程序域Application Domains

    简介 网上有很多flash,通常都不需要显示的使用应用程序域,因为默认的应用程序域就够用了.其实复杂的情况下需要用到应用程序域,比如说有两个不同的swf,一个是旧版本的,一个是新版的,这两个文件里的类 ...

  2. [Flex] ButtonBar系列——皮肤和外观设置

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...

  3. feedback 是什么意思

    feedback 是什么意思 能否不要说 feedback 呢?  加一个 feedback?  天啊   先解释一下 feedback 是什么  ? 还有   aria-describedby=&q ...

  4. UIPickView 和 UIDatePicker

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  5. DragonBone在FlashDevelop编译

    http://dragonbones.github.io/ dragonbones是一个强大的骨骼动画编辑器,基于Starling,用AS3语言编写,可以导出骨骼动画数据供其他程序使用. 下面来讲一下 ...

  6. 利用KeyVault来加强存储Azure Storage访问密钥管理

    很多时候管理Azure的存储账号我们都需要通过下面的界面管理访问密钥,大部分情况下通过密钥的轮替使用更新就可以做到安全管理了. 但是很多时候存储账号的Key就会不小心分发到开人员.测试人员.和管理员手 ...

  7. 学习练习 java输入输出流 练习题1

    .编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上. package com.hanq ...

  8. MySQL版本调研

    1引言 1.1 编写目的 本文的主要目的是通过对当前项目中使用的各种版本的数据库进行比较,分析各自特性和稳定程度,最终推荐合适的版本作为今后的标准数据库. 1.2 背景 当前,部门负责管理维护的现网使 ...

  9. noip2010提高组题解

    NOIP2010提高组题解 T1:机器翻译 题目大意:顺序输入n个数,有一个队列容量为m,遇到未出现元素入队,求入队次数. AC做法:直接开1000的队列模拟过程. T2:乌龟棋 题目大意:有长度为n ...

  10. malloc、calloc、realloc的区别

    (1)C语言跟内存分配方式 <1>从静态存储区域分配.       内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量.<2> ...