[Asp.Net]状态管理(Session、Application、Cache、Cookie 、Viewstate、隐藏域 、查询字符串)

原文:[Asp.Net]状态管理(Session、Application、Cache、Cookie 、Viewstate、隐藏域 、查询字符串)

  1. Session: 
    1. 客户在服务器上第一次打开Asp.Net页面时,会话就开始了。当客户在20分钟之内没有访问服务器,会话结束,销毁session。(当然也可以在Web.config中设置缓存时间)可以在Global.aspx的Session_Start()事件处理程序中,可以初始化会话变量。在下面的实例中,名为mydata的会话状态被初始化为0:

 

 

运行结果:

 

2.Session是保存在服务器端的用户变量。我可以在一个页面中对Session进行值,然后在另一个页面里访问它。

Session的附值方法如下:

2.Application

 

解释:如果数据应在多个客户端共享,就可以使用应用程序状态来保存。应用程序状态的使用方式跟Session非常相似。对于应用程序状态,应使用HttpApplication类,通过Page类的Application属性就可以访问它。

通常Application可以用来统计访问网站的人数,在启动Web应用程序时,初始化应用程序变量userCount。 Application_Start()是global.asax文件中的时间处理程序方法,在启动网站的第一个Asp.Net页面时调用该方法。

 在Application_Start()事件处理程序中,应用程序变量userCount的值会递增。在改变应用程序变量之前,应用程序对象必须用Lock() 方法锁定,否则会出现线程问题,因为多个用户可以同时访问一个应用程序变量。在改变了应用程序变量的值后,还必须调用Unlock()方法。注意锁定和解 锁时间的时间比较短,在此时间段内,不应读文件或数据库中的数据。否则,其他用户就必须等到数据访问完成之后才能操作。

运行结果:

注意:不要在应用程序状态中存储太多的数据,因为应用程序状态需要服务器资源,直到服务器停止或重启之后,才会释放这些资源。

 3.Cache

 使用Cache类的优点是当缓存的数据发生变化时,Cache类会让数据失效,并实现缓存数据的重新添加,然后通知应用程序,报告缓存的及时更新。

   1.常用的方法

   创建cache  
  在DotNet环境下通过Cache.Insert(string key,object o)方法创建。
      其中key 代表cache的ID,o代表存到cache里的对象。
 Add: 将数据添加到Cache对象
  Insert: 向Cache中插入数据项,可用于修改已经存在的数据缓存项
   销毁cache 
  通过方法Cache.Remove(string key)
     
其中key 代表cache的 ID.
   调用cache  
  Cache支持装箱/拆箱操作。如你可以把一个DataSet对象ds通过Cache.Insert(“dsCache”,ds)的方式存到Cache中,可以通过拆箱操作 DataSet ds =
(DataSet)Cache[“dsCache”]
来访问它。
      获取数据
 Get:从Cache对象中获取指定的数据项,注意返回的是Object类型,需要进行类型转换
 GetType:从Cache对象中获取数据项的类型,判断数据类型后,方便进行转换
GetEnumerator
 循环访问Cache对象中的缓存数据项。注意其返回类型是“IDictionaryEnumerator”
下面的代码演示了如何应用Cache类的这些方法。在使用本代码时需要注意,代码中使用了Arraylist对象,所以需要添加对命名空间“System.Collections”的引用,同时使用Cache类别忘记了添加命名空间

技巧:在使用GetType方法时,如果要判断类型,需要使用Object.GetType().Name属性获取类型的名称。

 

运行结果:

其中在读取类型为ArrayList的数据时,由于没有进行类型转换,所以取出的是类型为“System.Collections.ArrayList”的对象。

2.什么时候用cache  
  Cache 一般用于数据较固定,用的较频繁的地方。例如可以把进销存系统中可以把产品信息存入cache,在用户调用产品信息时通过调用cache即可,这样从很大 程度上减少了用户与数据库的交互,提高了系统的性能。反之,cache不适合用在数据变动快,使用范围很窄的地方。例如把一个具体采购单存入 cache中。
   3.cache 调用注意事项  
  Cache是有时间限制的。超过了服务器设置的过期时间,就会被服务器回收。当cache被回收后对应的内存块就会被清空,再次通过cache[“cachekey”]访问对象时返回的就是null值。所以以下这种调用就会出现异常
  4.缓存功能

典型应用:实现数据的缓存快速读取功能

本例的目的是将目录列表填充到下拉框中,当缓存失效后,目录列表的内容为空。演示的步骤如下所述。

在5秒以内如果单击按钮,则正常显示目录列表,如果超过5秒,则缓存对象已经不存在,所以下拉列表框的内容为空。

4. Viewstate

一、ViewState的原理

1.浏览器请求Default.aspx页面
2.在服务器端 发现创建的ViewState 这个时候 会自动创建一个名字叫做__VIEWSTATE(双下滑线 全部是大写)的隐藏域 其隐藏域的值经过base64加密以后返回到浏览器端这一加密过程在页面生命周期的SaveState事件中的SaveAllState方法中完成

3.当浏览器提交表单的时候 将__VIEWSTATE的隐藏域也一起提交到服务端 这个时候 页面生命周期的ReadState事件
的ReadAllState方法会将加密后的值反base64解密
最后将值赋值给名字叫做name的ViewState
4.最后来操作ViewState中的值

二、ViewState的用法:

1.定义ViewState属性

public int
PageCount{

get{return
(int)ViewState["PageCount"];}

set{ViewState["PageCount"]=value;}

}

2.使用ViewState的条件

如果要使用ViewState,则在ASPX页面中必须要有一个服务器端窗体标记(<form runat =
"server">)。窗体字段是必须的,这样包含ViewState信息的隐藏字段才能被传回服务器。而且,该窗体还必须是服务器端的窗体,这样
在服务器上执行该页面时,ASP.net页面框架才能添加隐藏字段。

page的EnableViewState 属性值为true

控件的EnableViewState 属性值为 true

四、viewstate与session的对比

  (1) session值是保存在服务器内存上,那么,可以肯定,大量的使用session将导致服务器负担加重. 而viewstate由于只是将数据存入到页面隐藏控件里,不再占用服务器资源,因此, 我们可以将一些需要服务器"记住"的变量和对象保存到viewstate里面. 而session则只应该应用在需要跨页面且与每个访问用户相关的变量和对象存储上.

(2) session在默认情况下20分钟就过期,而viewstate则永远不会过期.

但viewstate并不是能存储所有的.net类型数据,它仅仅支持String、Integer、Boolean、Array、ArrayList、Hashtable 以及自定义的一些类型.

任何事物都有两面性, 使用viewstate会增加页面html的输出量,占用更多的带宽,这一点是需要我们慎重考虑的. 另外, 由于所有的viewstate都是存储在一个隐藏域里面,用户可以很容易的通过查看源码来看到这个经过base64编码的值.然后再经过转换就可以获取你 存储其中的对象和变量值

5. Cookie
用于保存客户浏览器请求服务器页面的请求信息,其有效期可以人为设置,而且其存储的数据量很受限制,因此不要保存数据集及其他大量数据。而且Cookie以明文方式将数据信息保存在客户端的计算机中,因此最好不要保存敏感的未加密的数据。

以下是cookie的几种方法:

6.隐藏域


隐藏域是网页里面一个特殊的空间,它不在网页中显示出来,主要用途是为网页交互时存储一些不需要在网页显示的数据
隐藏域是用来收集或发送信息的不可见元素,对于网页的访问者来说,隐藏域是看不见的。当表单被提交时,隐藏域就会将信息用你设置时定义的名称和值发送到服务器上。

例如:<input type="hidden" name="ExPws"
value="dd">
其实说白了就隐藏域不在前台显视的,跟表单的元素一样.有名字有数值,只是在提交数据是不可见的.

例子:在ASP中隐藏域可以用于隐藏的表单,这样输入框就可以不受表单的限制可以随意在网页上布局
<input name="id"
type="hidden" value="abc">
<%="隐藏域值为:"& request("id")%>

提交此表单后会显示

隐藏域值为:abc

 7.查询字符串

当服务器执行到Response.Redirect语句时,会立即中断页面的生命周期,直接向客户端返回信息,让客户端进行重定向操作。

ASP.NET中,服务器端重定向有三种方法

1.Server.Transfer("xxx.aspx"):

服务器停止解析本页,保存此页转向前的数据后,再使页面转向到newPage.aspx,
并将转向前数据加上newPage.aspx页结果返回给浏览器。

2.Server.Execute("xxx.aspx");

服务器保存此页转向前的数据后,使页面转向到newPage.aspx执行, 再返回本页继续执行.再将三者结果合并后返回给浏览器.

3.Response.Redirect("xxx.aspx"):

服务器执行到这个方法时,就发信息告诉客户端浏览器,让客户端浏览器发出一个新的http请求,该请求的url为"xxx.aspx"。浏览器于是通过全新的http请求而转到了xxx.aspx页面。

总结:

1.用户变量的存储:session比较常用

2.页面跳转:查询字符串比较常用

3.缓存

l  cookie(用于保存客户浏览器请求服务器页面的请求信息,其有效期可以人为设置,而且其存储的数据量很受限制)

l  cache(用于数据缓存更新)

l  viewstate(存储在一个隐藏域里面, 不占用服务资源,永远不会过期但会增加html输出量,占用带宽)

l  application(应用于整个应用程序,相当于全局变量,但是用处不是很广泛,可以用于统计人数)

 

时间: 2024-10-30 21:24:52

[Asp.Net]状态管理(Session、Application、Cache、Cookie 、Viewstate、隐藏域 、查询字符串)的相关文章

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

ASP.NET 为您提供了一个强大的.便于使用的缓存机制,用于将需要大量服务器资源来创建的对象存储在内存中.缓存这些类型的资源会大大改进应用程序的性能. 缓存是由 Cache 类实现的:缓存实例是每个应用程序专用的.缓存生存期依赖于应用程序的生存期:重新启动应用程序后,将重新创建 Cache 对象. 设计 Cache 类是为了便于使用.您可以将项放置在 Cache 中,并在以后使用简单的键/值对来检索这些项. Cache 类提供了强大的功能,允许您自定义如何缓存项以及将它们缓存多长时间.例如,当

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

每次将网页发送到服务器时,都会创建网页类的一个新实例.在传统的Web编程中,这通常意味着在每一次往返行程中,与该页及该页上的控件相关联的所有信息都会丢失.例如,如果用户将信息输入到文本框,该信息将在从浏览器或客户端设备到服务器的往返行程中丢失. 状态管理是您对同一页或不同页的多个请求维护状态和页信息的过程.与所有基于 HTTP 的技术一样,Web 窗体页是无状态的,这意味着它们不自动指示序列中的请求是否全部来自相同的客户端,或者单个浏览器实例是否一直在查看页或站点.此外,到服务器的每一往返过程都

asp.net页面状态管理cookie和服务器状态管理Session

Cookie:是存储在客户端文件系统的文本文件中或客户端浏览器对话的客户端浏览器对话的内存中的少量的数据.当我们在访问一个网站网页,当用户请求该网页时,应用程序会首先检查用户在此前是否已经登录过,我们可以通过读取Cookie获取用户信息来判断是否让它继续访问 记录Cookie信息 创建一个名称是user的Cookie对象:HttpCookie cookie=new HttpCookie("user"); 给Cookie赋值,只能使用字符串赋值:cookie.Value="ch

ASP.Net状态管理

asp.net Asp.Net提供了四种状态类型:application,session,cookie,view. Application状态为应用程序提供了一个全局的状态.所有客户都可以使用该状态.从设计的角度来说,我们通常用Application来存储一些标准的数据.同时,我们在使用它时要注意避免性能的降低,存储的数据尽可能提供给客户只读的功能. 我们可以使用HttpApplication类的Application属性来访问Application状态,它返回一个HttpApplication

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

状态管理是您对同一页或不同页的多个请求维护状态和页信息的过程.与所有基于 HTTP 的技术一样,Web 窗体页是无状态的,这意味着它们不自动指示序列中的请求是否全部来自相同的客户端,或者单个浏览器实例是否一直在查看页或站点.此外,到服务器的每一往返过程都将销毁并重新创建页:因此,如果超出了单个页的生命周期,页信息将不存在. ASP.NET 提供多种方式来在服务器往返过程之间维护状态.对这些状态管理选项的选择主要取决于您的应用程序,并且应基于以下条件: 需要存储的信息量有多大? 客户端是接受持久性

ASP.NET状态管理之七(其他物理数据存放媒体)

ASP.NET状态存储还可以存放在数据库,XML文件,文本文件,注册表中等等,物理数据存放媒体 数据库 首推ADO.NET XML 管理XML文档和流主要由System.Xml命名空间中类执行 文件 相关类在System.IO命名空间中 注册表操作由System.Win32命名空间中2个类执行

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

ASP.NET 允许您将信息存储在 HiddenField 控件中,此控件将呈现为一个标准的 HTML 隐藏域. 隐藏域在浏览器中不以可见的形式呈现,但您可以就像对待标准控件一样设置其属性. 当向服务器提交页时,隐藏域的内容将在 HTTP 窗体集合中随同其他控件的值一起发送. 隐藏域可用作一个储存库,您可以将希望直接存储在页中的任何特定于页的信息放置到其中. 安全注意 恶意用户可以很容易地查看和修改隐藏域的内容.请不要在隐藏域中存储任何敏感信息或保障应用程序正确运行的信息. HiddenFiel

ASP.NET状态管理之十一(视图状态ViewState)

视图状态是 ASP.NET 页框架默认情况下用于保存往返过程之间的页和控件值的方法.当呈现页的 HTML 形式时,需要在回发过程中保留的页的当前状态和值将被序列化为 Base64 编码的字符串,并输出到视图状态的隐藏字段中. 视图状态是 ASP.NET 页中的储存库,可以存储需要在回发过程中保留的值.例如,您可以将信息存储在视图状态中,下次将页面发送到服务器时,将会在页加载事件过程中访问这些信息. 您可以使用页的 ViewState 属性(此属性公开一个字典对象)来访问视图状态信息.由于视图状态

ASP.NET状态管理之四(暂存状态HttpContext.Items)

ASP.NET提供一个类System.Web.HttpContext ,用来表示上下文,此对象有一个属性Items 暂存状态就是利用HttpContext.Items属性来存放数据 MSDN中HttpContext.Items属性的解释是这样的:获取可用于在 HTTP 请求过程中在 IHttpModule 和 IHttpHandler 之间组织和共享数据的键值 HttpContext.Items属性中可以存放任何类型数据,无论这个属性中存放什么数据,都会在请求处理结束后自动清除,这就是暂存状态,