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>标签中,
由于这些状态信息每次通信都要来回传递,加重了网络压力,建议只在本地网络的应用中使用

posted on 2009-06-28 02:49  imbob  阅读(293)  评论(0编辑  收藏  举报

导航