状态是某一类型的数据在一定时期内保持活跃的信息。这里说的一定时期可以使整个应用程序的生命周期,可以使用户操作程序的时间,当然也可以是单个页面的生命周期等。
   为了解决传统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. 全文检索引擎Solr系列—–全文检索基本原理

    场景:小时候我们都使用过新华字典,妈妈叫你翻开第38页,找到“坑爹”所在的位置,此时你会怎么查呢?毫无疑问,你的眼睛会从38页的第一个字开始从头至尾地扫描,直到找到“坑爹”二字为止.这种搜索方法叫做顺 ...

  2. 脱离rails 使用Active Record

    目录结构 database.yml development: adapter: sqlite3 database: db/test.db pool: 5 timeout: 5000 001_schem ...

  3. ElasticSearch 常用的查询过滤语句

    query 和  filter 的区别请看: http://www.cnblogs.com/ghj1976/p/5292740.html Filter DSL term 过滤 term主要用于精确匹配 ...

  4. C++primer 练习13.39

    13.39 编写你自己版本的StrVec,包括自己版本的reserve,capacity(参见9.4节,第318页)和resize(参见9.3.5节,第314页) 13.40 为你的StrVec类添加 ...

  5. iBeacons 资源汇总

    从淘宝上购买了iBeacons的开发模块,便开始要熟悉这个技术了. 先来说一下什么是iBeacons iBeacons是苹果在2013年WWDC上推出一项基于蓝牙4.0(Bluetooth LE | ...

  6. cctype函数 (字符类型判断)

    这些函数都在cctype头文件定义 isalnum(c)  如果C是字母或数字,则为TRUE isalpha(c)  如果C是字母,返回TRUE iscntrl(c) 如果C是控制字符,返回TRUE ...

  7. 一个JS定时器类

    学习js,因为函数和定时器直接的关系是非绑定的.我不能说我开启一个定时,然后拿一个变量去记录这个setInterval的返回值,这样很麻烦. 本着面向对象的思想,利用业余时间(周末在家里)写了一个类, ...

  8. WebsitePanel(wsp)配置详解(安装指南)

    WebsitePanel(wsp)配置详解(安装指南) 铁卫士原创 估计很多同学都还不知道WebsitePanel是什么东东吧,WebsitePanel简称wsp是微软旗下,开源免费的虚拟主机系统,我 ...

  9. Linux系统自启动脚本

    只需编辑/etc/init.d/rc.local文件,在最后加上你的脚本即可.比如:我已经编写了一个脚本shell.sh,存放在/home/mars704/Desktop/ 下面在终端输入 gedit ...

  10. 慕课网-安卓工程师初养成-4-8 Java循环语句之 do...while

    do...while 循环与 while 循环语法有些类似,但执行过程差别比较大. 语法:  执行过程: <1>. 先执行一遍循环操作,然后判断循环条件是否成立 <2>. 如果 ...