使用Application、Session、Cookie、ViewState和Cache等对象保存信息的区别

时间:2022-10-01 07:54:52

 

 

 

1、Application对象

      保存用户共有的数据信息。在ASP中,如果保存的数据在应用程序的生存期中根本不会改变或很少变化,那儿使用Application对象保存这种数据。但在ASP.NET中类似的配置数据最好保存在Web.config文件中。

     使用Application对象,任何写操作都要在Application_OnStart事件(global.asax)中完成。可使用Application.Lock和Application.Unlock方法避免写操作的同步,但是它串行化了对Application对象的请求,当网站访问量大的时候会产生性能瓶颈。

     使用Application对象保存信息的语法如下:

      //存放信息

      Application["nameID"]="0001";

      //读取信息

      String NameID=Application["nameID"].ToString();

2、Session对象

      保存每个用户的专用信息。它的生存期是用户持续请求时间加上一段时间。

       Session中的信息保存在Web服务器的内存中,保存的数据量可大可小。当Session超时或者被关闭时将自动释放内存的数据信息。效率低下。小量的数据,使用Session对象保存还是一个不错的选择。语法如下:

       //存放信息

       Session["nameID"]="0001";;

       //读取信息

       String NameID=Session["nameID"].ToString();

3、Cookie对象

       保存客户浏览器请求服务器页面的请求信息,可以用它存放非敏感性的用户信息,信息保存的时间可以根据需要设置。如果没有设置Cookie失效日期,它们仅保存到关闭浏览器程序为止。如果将Cookie对象的Expires属性设置为MinValue,则表示Cookie永远不会过期。Cookie存放的数据量很受限制,大多数浏览器支持最大容量为4096字节,因此不要用来保存数据集及其他大量数据。由于并非所有的浏览器都支持Cookie,并且数据信息是以明文文本的形式存放在客户端的计算机上,因此最好不要存放敏感的、未加密的数据。语法如下:

      //存放信息

      Response.Cookie["nameID"].Value="0001";;

     //读取信息

     String NameID=Response.Cookie["nameID"].Value;

     Session加密,FormsAuthenticationHashPasswordForStoringInConfigFile(NameID,"MD5");

4、ViewState对象

      用来保存单个用户的状态信息,有效期等于页面的生存期。ViewState容器可以保持大量的数据,但须谨慎。

      所有Web服务器控件都使用ViewState在页面回发期间保存自己的状态信息。如果某个控件不需要在回发期间保存状态信息,最好关闭该对象的ViewState,避免不必要的资源浪费。通过给@Page指令添加"EnableViewState=false"属性可以禁止整个页面的ViewState。语法如下:

     //存放信息

     ViewState["nameID"]="0001";

    //读取信息

    String NameID=VIewState["nameID"].ToString();

5、Cache对象

     用于在HTTP请求期间保存页面或数据。该对象使用可极大提高整个应用程序的效率。它允许将频繁访问的大量服务器资源存放在内存中,当用户发出相同的请求后服务器不用再次处理而是将Cache中保存的信息返回给用户,节省了服务器处理时间。此对象的实例是每个应用程序专用的,其生存期依赖于应用程序的生存期。当重新启动应用程序时,将重新创建其Cache对象的实例。语法:

     //存放信息

    Cache["nameID"]="0001";

     //存放信息

    Cache.Insert("nameID","0001");

     //读取信息

     String NameID=Cache["nameID"].ToString();

     如果要利用缓存提供的清理、到期时间和依赖项等功能,必须使用Cache.Insert方法或Cache.Add方法添加信息。

6、隐藏域

      Hidden控件是属于HTML类型的服务器控件。和其他控件的区别只在于在客户端不见,始终处于隐藏状态。但是每次页面提交的时候,此空间和其他服务器控件一同提交到服务器端,因此在服务器端可以使用Value属性获取或保存一些数据信息。语法:

     //存放信息

     Hidden.Value=“0001”;

     //读取信息

     String NameID=Hidden.Value;

7、查询字符串

     这种方式是将要传递的值连接在URL后面,然后通过Response.Redirect方法实现客户端的重定向。这种方式可以实现在两个页面之间传递信息。由于URL的长度有一定的限制,考虑到这个以及安全性。

     Response.Redirect("List.aspx?nameID=0001&gradeID=002");

     http://localhost/List.aspx?nameID=0001&gradeID=002

     //获取信息

     String NameID,GradeID;

     NameID=Request.Params["nameID"];

     GradeID=Request.Params["gradeID"];

还可以使用Context对象和Web.Config配置文件。

原则如下:

  • 保存的信息量大小;
  • 保存信息时间的长短;
  • 保存信息应用范围的大小;
  • 信息保存在客户端还是服务器端;

 

方法

信息量大小

保存时间

应用范围

保存位置

Application

任意大小

整个应用程序生命期

所有用户

Server

Session

小量、简单数据

用户活动时间+

单个用户

Server

Cookie

小量、简单数据

可以根据需要设定

单个用户

Client

ViewState

小量、简单数据

一个Web页面的生命期

单个用户

Client

Cache

任意大小

可以根据需要设定

所有用户

Server

隐藏域

小量、简单数据

一个Web页面的生命期

单个用户

Client

查询字符串

小量、简单数据

直到下次页面跳转请求

单个用户

Client

Web.config

不变或极少改变的销量数据

直到配置文件更新

所有用户

Server

使用时必须进行类型转化