webform中四种状态机制 application,session,cookie,viewstate


application

我们可以在Global.asax的Application_Start函数中存储数据:

void  Application_Start( object  src, EventArgs e)
{
int  exp  =   0 ;
//  population of dataset from ADO.NET query not shown
//  Cache DataSet reference
Application[ " Experiment " =  exp;
}


现在你可以在任意页面下使用它:

private   void  Page_Load( object  src, EventArgs e)
{
  
int  expr  =  Int32.Parse((Application[ " Experiment " ]));
}

 


基于程序级别的状态,所以信息是所有用户共享的

当站点重新启动时信息就会丢失,

对所有共享的信息(web中)进行写操作的时候都要注意对于锁的应用.

private   void  Page_Load( object  sender, System.EventArgs e)
{
 Application.Lock();
 
int  expr  =  Int32.Parse((Application[ " Experiment " ]));
 
if  (expr >= something)
 {
  
// do something
 }
 Else
 {
  
// do something else
 }
 Application.UnLock();
 
// Some other thing goes here
}

 

Session

为用户会话状态保存信息的机制,

Session[“Value”] = abc;


值得注意的是,在默认状况下,当cookie不可用时,session也会失效,为了避免这种状况发生,可以在config文件中设置:

< configuration >
  
< system.web >    
    
< sessionState  cookieless ="true"   />
  
</ system.web >
</ configuration >

 

cookie

protected   void  Page_Load(Object sender, EventArgs E)
{
 
int  expr  =   0 ;
 
if  (Request.Cookies[ " Expr " ==   null )
 {
  
//  "Expr" cookie not set, set with this response
  HttpCookie cokExpr  =   new  HttpCookie( " Expr " );
  cokExpr.Value 
=  exprTextBox.Text;
  Response.Cookies.Add(cokExpr);
  expr 
=  Convert.ToInt32(exprTextBox.Text);
 }
 
else
 {
  
//  use existing cookie value
  expr  =  Convert.ToInt32(Request.Cookies[ " Expr " ].Value);
 }
 
//  use expr to customize page
}

 
viewstate 为用来保存本页控件状态而存在的一种信息,被保存在html的一个隐藏的<input>标签中,
由于这些状态信息每次通信都要来回传递,加重了网络压力,建议只在本地网络的应用中使用

你可能感兴趣的:(application)