Asp.net 服务器Application,Session,Cookie,ViewState和Cache区别


系统对象与状态管理  
原文   http://www.cnblogs.com/liaoqiang/archive/2010/01/30/1660021.html

Page对象
Page
对象是指向页面自身的方式,在整个页面的执行期内,都可以使用该对象
示例:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="defautl.aspx.cs" Inherits="_default"%>


属性


说明


Language


指定页面代码和后置代码使用的语言,需要注意的是,这里支持微软.NET框架中的语言


AutoEventWireup


设置页面是否自动调用网页事件(也就是在后置代码中的Page_Load() 事件是否执行),默认(不写时)为true


CodeFile


指定代码后置文件,后置代码,该后置代码与页面是局部关系


Inherits


页面类

Request对象
Request
对象封装了由Web浏览器或其他客户端生成的 HTTP 请求的细节(参数、属性和数据),提供从浏览器读取信息或这读取客户端信息等功能,用于页面请求期
Request
对象是HttpRequest类的一个实例。它能够读取客户端在Web请求期间发送的HTTP值。


Request对象属性


属性


说明


属性


说明


UserLanguages


客户端主机所使用的语言


Pathq


当前网页的相对地址


UserHostName


客户端主机的DNS名称


IsSecureConnection


目前联机的安全性


userHostArrress


客户端主机的IP地址


IsAuthenticated


目前联机是否有效


UserAgent


客户端浏览器版本


Headers


网页的标题集合


Url


当前要求的URL


Form


窗体变量


TotalBytes


当前输入的容量大小


Files


客户端上传的文件


ServerVariables


网页的Server变量,集合中包含了服务器和客户端的系统信息


Cookies


HttpCookieCollection对象集合


RequestType


客户端网页的传送方式(Get/Post)


HttpMethod


目前客户端网页的传送方式(Get/Post)


RawUrl


当前页面的URL


FilePath


当前执行网页的相对地址


QueryString


浏览器地址栏后的参数


ContentType


当前需求的MIME内容类型


PhysicalPath


当前网页在服务器端实际路径


ContentEncoding


客户端浏览器的字符设置


ClientCertificate


客户端安全认证信息


Path


获取当前请求的虚拟路径


PhysicalApplicationPath


当前在服务器端执行的程序的实际路径


ConnectionlD


客户端所提出的网页浏览请求的联机的ID


AnnlicationPath


当前运行程序的服务器端虚拟目录


BinaryRead


执行对当前输入流进行指定字节数的二进制读取


Params


返回QueryStringFormCookiesServerVariables的全部集合


Browser


客户端浏览器的信息(获取有关正在请求的客户端的浏览器功能的信息)

 

示例:1、使用QuestString获取 HTTP 查询字符串变量集合

页面1中有一连接地址进行参数传递: <a href = "QueryString.aspx?nameA=‘asp‘&nameB=‘jsp‘"></a>
  
页面2获得地址参数:    //首次加载
    protected void Page_Load(object sender, EventArgs e)  {
        if (!IsPostBack)    {
            if(Request.QueryString["nameA"] != null && Request.QueryString["nameB"] != null)     {
                string nameA = Request.QueryString["nameA"] as string ;
                string nameB = Request.QueryString["nameB"] as string ;
            }      }    }
2
、使用Form获取 HTTP 查询字符串变量集合
页面1中有一连接地址进行参数传递:
    <form name="formGet" method="get" action = "Form.aspx?nameA=‘asp‘&nameB=‘jsp‘">    </form>
页面2获得地址参数:
    //
首次加载
    <Script Language="C#" Runat="Server">
        void Page_Load(object sender, System.EventArgs e)    {
            Response.Write(Request.Form["nameA"] + "<br>" +Request.QueryString["nameB"]);
        }   </Script>
 Response
对象

Response对象封装返回到 HTTP 客户端的输出,提供向浏览器输出信息或者发送指令,用于页面执行期


Response对象的常用方法


Write(String str)


可以输出指定的文本内容


End()


可以使用 Web 服务器停止当前的程序并返回结果


Rediect(String URL)


可以将也页面重定向到另外一个页面

 


Page对象在后置页面中的属性


返回类型


语法


说明


示例


boolean


IsPostBack


获取一个值,该值指定该页是否正为响应客户端回发而加载,或者他是否正被首次加载或访问 (true 说明是响应客户端回发而加载 false 说明是首次加载或访问)


if (!IsPostBack) {
this.txtName.Text = "
请在此输入用户名";
  this.txtPwd.Text = "
请在此输入密码";}


boolean


IsCrossPagePostBack


获取一个值,该值指示跨页回发中是否涉及该页(判断页面是否是跨页提交)( true 说明是跨页提交false 说明不是跨页提交)


if (Page.IsCrossPagePostBack) {this.txtKeyWord.Text = "跨页数据传递";}

 


PreviousPage 的属性和方法


返回类型


语法


说明


示例


boolean


IsCrossPagePostBack


获取一个值,该值指示跨页回发中是否涉及该页(判断页面是否是跨页提交)(true 说明是跨页提交 false 说明不是跨页提交)


if (PreviousPage.IsCrossPagePostBack)

this.lblShow.Text = "跨页数据传递";
}


Control


FindControl(String ID)


在页命名容器中搜索带指定标识符的服务器控件。


((TextBox)this.PreviousPage.FindControl("txtKeyWord")).Text;

 


ASP.NET页面传值


页内传值


//传递
protected void Page_Load(object sender, EventArgs e){
  if (!IsPostBack) {
    this.txtName.Text = "
请在此输入用户名";      this.txtPwd.Text = "请在此输入密码";}}
//
接收数据
protected void btnSub_Click(object sender, EventArgs e){
  Response.Write(this.this.txtName.Text + <br/>; + this.txtPwd.Text);}


跨页传值


//接收数据
protected void Page_Load(object sender, EventArgs e){
  if (Page.PreviousPage != null) {
    if (PreviousPage.IsCrossPagePostBack) {
      this.lblName.Text = "
 名:" + ((TextBox)this.PreviousPage.FindControl("txtName")).Text;
    }}}

 


页面跳转


重定向


Response.Redirect

(String URL)


protected void btnSub_Click(object sender, EventArgs e){
  if(this.txtName.Text.Trim()=""||this.txtPwd.Text.Trim()=="") 

{ Response.Write("请输入姓名或密码");

 }else{Response.Redirect("welcome.aspx");  }    }


使用Button自带的属性


PostBackUrl单击按钮时所发送到的 URL

       

单击按钮页面跳转传参
    //
传参  protected void btnSub_Click(object sender, EventArgs e) {

Response.Write("<script>window.location.href=‘BookDetail.aspx?iSBN="+this.txtISBN.Text+"‘</script>"); 
      //Response.Redirect("BookDetail.aspx?iSBN=" + this.txtISBN.Text); }
    //
接受
    protected void Page_Load(object sender, EventArgs e)  {
        if (Request.QueryString["iSBN"] != null)    {
            iSBN = Request.QueryString["iSBN"].Trim();
            this.ShowBook(id, iSBN);
        }    }
 Cookie
对象保持于客户端的共享信息方式


单个写入形式


Response.Cookies["Cookie 的名称"].Value=变量值; //写入 Cookie
Response.Cookies("Cookie 
的名称").Expires= DateTime.Now.AddMonths(1); //设置 Cookie 时间(有效期为一个月)
string 
变量名=Request.Cookies["Cookie 的名称"].Value; //读取 Cookie


使用数组类型形式


HttpCookie hcCookie = new HttpCookie("Cookie 的名称","");
hcCookie.Values["
子变量名称1"] = 变量值;
hcCookie.Values["
子变量名称2"] = 变量值;
hcCookie.Expires = DateTime.Now.AddMonths(1); //
有效期为一个月
Response.Cookies.Add(hcCookie);
string 
变量名1 = Request.Cookies["Cookie 的名称"]["counts"]; //读取 Cookie

Session 对象为某个用户提供共享信息,作用于用户会话期
语法:Session["Session 名称"] = ; //存储     变量 = Session["Session 名称"] as 对象名; //读取


Session对象的常用属性和方法


属性和方法


说明


SessionID 属性


包含唯一的的用户会话标识符,它可用于在整个会话过程中记录用户信息


Timeout 属性


用户设置用户超时的时间,单位为分钟。在该段时间内,用户即使没有任何操作,用户状态也不会被清除,注意此设置是针对服务器清除Session的时间而言,因为如果一段时间内没有操作,服务器是无法知道用户是否在线,所以一超时时间为限。而客户端有自己的处理机制,不同的浏览器也不尽相同,一般关闭窗口就会造成Session失效。(默认为20分钟)


IsNewSession 属性


如果已按当前请求创建会话,那么该属性将返回true


Clear 方法


从会话状态集合中移除所有的键和值


Abandon方法


结束Session,取消当前会话(当前页面所有代码都执行结束以后才会执行)

Application 对象为所有用户提供共享信息,作用于整个应用程序运行期:
语法:Application["Application 名称"] = ;     变量 = Application["Application 名称"]


Application 对象的常用属性


 


说明


属性


All


返回全部的 Application 对象变量到一个对象数组


AllKeys


返回全部的 Application 对象变量到一个字符串数组


Count


取消 Application 对象变量的数值


Item


允许使用索引或 Application 变量名称传回内容值


方法


Add


新增一个 Application 对象变量


 


 


Clear


清楚全部的 Application 对象变量


Get


使用索引值或变量名称传回变量值


Set


使用变量名称更新一个 Application 对象变量的内容


Lock


锁定全部的 Application 变量


UnLock


解除锁定 Application 变量

ViewState
Server
对象该对对象是 JSP中没有的,它提供了服务期端的一些属性和方法。


Server对象的常用方法


HtmlEncode


此方法带有一个字符串参数,可以将其编码,使其在浏览器中正确显示。比如希望在页面输入一个"<br>",又不想在浏览器中显示成换行,则需要使用该方法


HtmlDecode


此方法与HtmlEncode方法相反,对以编码内容解码


MapPath


此方法带有一个虚拟路径,可返回该路径的物理磁盘中的准去位置。此方法在Web开发过程中使用频率比较高。一般实现文件读写都需要该方法


UrlEncode


URL地址进行编码。对于URL需要传输含有"#""&"等特殊自负的参数时,需要进行编码,否则后面的内容不会被识别


Execute


在当前页面执行参数指定的页面,执行完后继续执行本页面


Transfer


参数指定的页面处理完成后,页面执行就结束,不像Execute那样还要返回控制权给先前的页面

 


Application,Session,Cookie,ViewStateCache用法和区别


内置对象


信息量大小


作用域和保存时间


应用范围


保存位置


Application


任意大小


整个应用程序的生命期


整个应用程序/所有用户


服务器端


Cache


任意大小


可以根据需要设定


整个应用程序/所有用户


服务器端


Session


小量,简单的数据


用户活动时间+一段延迟时间(一般为20分钟)


单个用户


服务器端


Cookie


小量,简单的数据


可以根据需要设定


单个用户


客户端


Viewstate


小量,简单的数据


一个Web页面的生命期


单个用户


客户端


隐藏域


小量,简单的数据


一个Web页面的生命期


单个用户


客户端


查询字符串


小量,简单的数据


直到下次页面跳转请求


单个用户


客户端

1.Application对象
Application
用于保存所有用户的公共的数据信息,如果使用Application对象,一个需要考虑的问题是任何写操作都要在Application_OnStart事件(global.asax)中完成.尽管使用Application.LockApplicaiton.Unlock方法来避免写操作的同步,但是它串行化了对Application对象的请求,当网站访问量大的时候会产生严重的性能瓶颈.因此最好不要用此对象保存大的数据集合下面我们做个在线用户统计的例子来说明这个问题:
(
以文件的形式存放网站总访问量)
Code       Global.asax

using System;using System.Collections;using System.ComponentModel;using System.Web;using System.Web.SessionState;   using  System.IO;
// Global 
的摘要说明。
public class Global : System.Web.HttpApplication{

   必需的设计器变量。
   private System.ComponentModel.IContainer components = null;
   private FileStream fileStream;
   private StreamReader reader;//
读字符流   private StreamWriter writer;//写字符流
   public Global() {
      InitializeComponent();  } 
   protected void Application_Start(Object sender, EventArgs e)   {
      Application["CurrentGuests"]=0;//
初始花为0;
   fileStream = File.Open(Server.MapPath("counts.text"),FileMode.OpenOrCreate);//
文件不存在,创建文件
      reader = new StreamReader(fileStream);//
要读取的完整路径
      Application["AllGuests"] = Convert.ToInt32(reader.ReadLine()); //
从当前流中读取一行字符并将数据作为字符串返回   reader.Close();//关闭流   }
 protected void Session_Start(Object sender, EventArgs e)//
当用户访问网站时,在线用户+1,总访问数+
   {Application.Lock();//
同步,避免同时写入
      Application["CurrentGuests"] =(int)Application["CurrentGuests"]+ 1;//
总在线用户数
      Application["AllGuests"] =(int)Application["AllGuests"]+ 1;//
访问网站的总用户数

 fileStream=new    FileStream(Server.MapPath("counts.text"),

FileMode.OpenOrCreate,FileAccess.ReadWrite);//
      writer = new StreamWriter(fileStream);//
实现一个写入流,使其以一种特定的编码向流中写入字符
      writer.WriteLine(Application["AllGuests"].ToString());//
把访问网站的总用户数再次写入到文件
      writer.Close();//
关闭写入流    Application.UnLock();//同步结束
   }
   protected void Session_End(Object sender, EventArgs e)//
当前用户退出网站时,在线用户数量-1,
   {
      Application.Lock();
      Application["CurrentGuests"] =(int)Application["CurrentGuests"] - 1;//
总在线用户数量-1
      Application.UnLock(); 
   }}
(2) WebForm1.aspx
private void Page_Load(object sender, System.EventArgs e){
   this.Label1.Text = "
正在访问站点的用户数:" + Application["CurrentGuests"].ToString(); 
   this.Label2.Text ="
访问过站点的总用户数:" + Application["AllGuests"].ToString();
}
2.Session
对象
Session
用于保存每个用户的专用信息.每个客户端用户访问时,服务器都为每个用户分配一个唯一的会话IDSession ID) . 她的生存期是用户持续请求时间再加上一段时间(一般20分钟左右).Session中的信息保存在Web服务器内容中,保存的数据量可大可小.Session超时或被关闭时将自动释放保存的数据信息.由于用户停止使用应用程序后它仍然在内存中保持一段时间,因此使用Session对象使保存用户数据的方法效率很低.对于小量的数据,使用Session对象保存还是一个不错的选择.使用Session对象保存信息的代码如下:
Session["key"]="value"//
存放信息     string UserName=Session["key"].ToString();//读取数据
3.Cookie
对象
Cookie
用于保存客户浏览器请求服务器页面的请求信息,程序员也可以用它存放非敏感性的用户信息,信息保存的时间可以根据需要设置.如果没有设置Cookie失效日期,它们仅保存到关闭浏览器程序为止.如果将Cookie对象的Expires属性设置为Minvalue,则表示Cookie永远不会过期.Cookie存储的数据量很受限制,大多数浏览器支持最大容量为4K,因此不要用来保存数据集及其他大量数据.由于并非所有的浏览器都支持Cookie,并且数据信息是以明文文本的形式保存在客户端的计算机中,因此最好不要保存敏感的,未加密的数据,否则会影响网站的安全性.使用Cookie对象保存的代码如下:
Response.Cookies["key"].Value="value";//
存放信息
string UserID=Response.Cookies["key"].Value; //
读取信息
4.ViewState
对象
ViewState 
常用于保存单个用户的状态信息,有效期等于页面的生存期。跟隐藏控件相似。viewstate是在本页面之内各函数间进行传值的 , 至于为什么要使用这种方法是因为在一个事件发生之后 , 页面可能会刷新 , 如果定义全局变量会被清零 , 所以要使用viewstate. ViewState容器可以保持大量的数据,但是必须谨慎使用,因为过多使用会影响应用程序的性能。所有Web服务器控件都使用ViewState在页面回发期音保存自己的状态信息。如果某个控件不需要在回发期间保存状态信息,最好关闭该对象的ViewState,避免不必要的资源浪费。通过给@Page指令添加“EnableViewState=false”属性可以禁止整个页面的ViewState。使用ViewState对象保存信息的代码如下。
ViewState["key"]="value";//
存放信息
string NameID=ViewState["nameID"].ToString();//
读取信息
5.Cache
对象
Cache
对象用于在HTTP请求间保存页面或数据。该对象的使用可以极大地提高整个应用程序的效率。常用于将频繁访问的大量服务器资源存储在内存中,当用户发出相同的请求后服务器不再次处理而是将Cache中保存的信息返回给用户,节省了服务器处理请求的时间。其生存期依赖于该应用程序的生存期。当重新启动应用程序时,将重新创建其Cache对象的实例。使用Cache对象保存信息的代码如下。
Cache["nameID"]="0001";//
存放信息
Cache.Insert("nameID","0001"1); //
存放信息
string NameID=Cache["nameID"].ToString();//
读取信息
6.
隐藏域
Hidden
控件是属于HTML类型的服务器控件,使用此控件可以实现隐藏域的功能。其实此控件和其它服务器控件的使用没有太大区别,只是它不会在用户端的浏览器中显示,始终处于隐藏状态。但是每次页面提交的时候,此控件和其它服务器控件一同提交到服务器端,因此在服务器端可以使用Value属性获取或保存一些数据信息。使用Hidden控件保存信息的代码如下。
Hidden.Value="0001";//
存放信息
string NameID=Hidden.Value; //
获取信息
7.
查询字符串
查询字符串的方式是将要传递的值连接在URL后面,然后通过Response.Redirect方法实现客户端的重定向。这种方式可以实现在两个页面之间传递信息。由于URL的长度有一定的限制,因此不能传递太大的信息,加外安全性也不是很好。
//
传递信息如下。(问号后面格式 key1=value1&key2=value2)
Response.Redirect("List.aspx?nameID=0001&gradeID=002");
//
执行上面的语句后在IE地址栏显示的URL的代码如下。
http://localhost/List.aspx?nameID=0001&grade=002
//
当跳转到List.aspx后,可以通过以下代码获得所传递的信息。
string NameID.GradeID;
NameID=Request.Params["nameID"];

GradeID=Request.Params["gradeID"]

时间: 2024-10-10 05:46:34

Asp.net 服务器Application,Session,Cookie,ViewState和Cache区别的相关文章

Application,Session,Cookie,ViewState和Cache区别

在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生命期 整个应用程序/所有用户 服务器端 Cache 任意大小 可以根据需要设定 整个应用程序/所有用户 服务器端 Session 小量,简单的数据 用户活动时间+一段延迟时间(一般为20分钟) 单个用户 服务器端 Cook

ASP.NET:Application,Session,Cookie,ViewState和Cache之间的区别(转)

在ASP.NET中,有很多种保存信息的对象.例如:Application,Session,Cookie,ViewState和Cache等,那么它们有什么区别呢?每一种对象应用的环境是什么? 为了更清楚的了解,我们总结出每一种对象应用的具体环境,如下表所示: 方法 信息量大小 保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生命期 所有用户 服务器端 Session 小量.简单的数据 用户活动时间+一段延迟时间(一般为20分钟) 单个用户 服务器端 Cookie 小量

ASP.NET:Application,Session,Cookie,ViewState和Cache之间的区别

在ASP.NET中,有很多种保存信息的对象.例如:Application,Session,Cookie,ViewState和Cache等,那么它们有什么区别呢?每一种对象应用的环境是什么? 为了更清楚的了解,我们总结出每一种对象应用的具体环境,如下表所示: 方法 信息量大小 保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生命期 所有用户 服务器端 Session 小量.简单的数据 用户活动时间+一段延迟时间(一般为20分钟) 单个用户 服务器端 Cookie 小量

[区别]APPlication,Session,Cookie,ViewState和Cache

原文发布时间为:2009-08-01 -- 来源于本人的百度文章 [由搬家工具导入] 在ASP.NET中,有很多种保存信息的对象.例如:APPlication,Session,Cookie,ViewState和Cache等,那么它们有什么区别呢?每一种对象应用的环境是什么?     为了更清楚的了解,我们总结出每一种对象应用的具体环境,如下表所示: 方法 信息量大小 保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生命期 所有用户 服务器端 Session 小量,简

ASP.NET Application,Session,Cookie和ViewState等对象用法和区别 (转)

在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生命期 整个应用程序/所有用户 服务器端 Cache 任意大小 可以根据需要设定 整个应用程序/所有用户 服务器端 Session 小量,简单的数据 用户活动时间+一段延迟时间(一般为20分钟) 单个用户 服务器端 Cook

Application,Session,Cookie你能分的清吗?--【Asp.Net】

背景: 每个东东产生的时候都是有原因滴,我个人觉得,这几种方式跟缓存很类似,都是把常用的一些数据放到缓存里面先存起来,比直接从内存或硬盘中读取更加的迅速,从而提高效率.Application,Session,Cookie是Asp.Net中常用的三种存取临时数据的方法. Application/session/Cookie对比: 对比 Session Application Cookie 作用 用于保护用户的专用信息 用于保存所有用户的公共数据信息. 用于保护客户浏览器请求服务器页面的请求信息 使

session,cookie,sessionStorage,localStorage的区别及应用场景

session,cookie,sessionStorage,localStorage的区别及应用场景 浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务端进行数据交互. 一.cookie和session cookie和session都是用来跟踪浏览器用户身份的会话方式. 区别: 1.保持状态:cookie保存在浏览器端,session保存在服务器端 2.使用方式: (1)cookie机制:如果不在浏览器中设置过期时间,cookie被保存在内存中

查看服务器Application/Session变量工具

<" CODEPAGE="936"%>   <%   Response.Expires = 0;   Response.Buffer  = true;   var tPageStartTime = new Date();   %>  <html>  <head>  <title>网站-Application变量-Session变量</title>  <meta http-equiv="Co

浅谈session,cookie,sessionStorage,localStorage的区别及应用场景

浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务端进行数据交互. 一.cookie和session cookie和session都是用来跟踪浏览器用户身份的会话方式. 区别: 1.保持状态:cookie保存在浏览器端,session保存在服务器端 2.使用方式: (1)cookie机制:如果不在浏览器中设置过期时间,cookie被保存在内存中,生命周期随浏览器的关闭而结束,这种cookie简称会话cookie.如果在浏览器中设置了cookie