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;
}
{
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"]));
}
{
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
}
{
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>
<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
}
{
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>标签中,
由于这些状态信息每次通信都要来回传递,加重了网络压力,建议只在本地网络的应用中使用
版权声明:本文原创发表于 博客园,作者为 imbob,博客 http://imbob.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。