ASP.NET中有哪些状态类型

本篇文章给大家分享的是有关ASP.NET中有哪些状态类型,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

成都创新互联公司长期为千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为安阳县企业提供专业的成都网站制作、做网站,安阳县网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。

我们可以在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"]));  }

于Application状态对于所有客户都是共享的,如果客户只是读取该数据,则没有什么问题,一旦要进行写操作,就不能保证线程的安全以及出现同步争用的问题。我们可以使用HttpApplicationStateLock类,它派生于ReadWriteObjectLock类,它提供了读/写锁的两种属性。在ASP.NET下,隐式地调用了AcquireWrite()和AcquireRead()方法以保证避免上面的问题。当然,我们也可以显示地使用Lock()和Unlock():

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,cookie,view状态都是用来保存客户端信息的ASP.NET状态类型。它们之间又有什么区别呢?

Session状态是在客户登录的时候创建的,它保存了客户特定的信息,并以Session ID来标识。当一个新客户访问应用程序时,先生成一个新的Session ID(或是Session Key),并为同一个客户接下来的请求创建联系。你可以在Session State中存储任意类型的数据,作为你的应用,状态被同一个进程和AppDomain(App域)维护。Session State的特点是为每一个特定的客户创建状态以维护客户的信息,这些状态信息存储在服务器端的默认的会话状态配置中。

Session(“Value”) = expr ; // Storing the data into session object  SomeFunction()  {  int expr = Int32.Parse(Session(“Value”));//Accessing from it   if (expr>=something)  {  //do something   }  Else  {  //do something else   }  //Some other thing goes here  }

既然Session State针对特定的客户建立,通过它来识别客户的请求。ASP.NET提供了一种加密机制和编码算法生成自己的Session Key。这是非常必要的,因为知道了你的Session Key,就有权限访问指定的页面了。

在ASP.NET中生成Session Key的方法:

byte[] sessionkey = new byte[15];  //Generates a random number  RNGCryptoServiceProvider rngkey = new RNGCryptoServiceProvider ();  rngkey.GetBytes (sessionkey);  string clientsessionKey = SessionId.Encode (sessionkey);


但是Session和客户端的Cookie是有关的,当客户关掉Cookie时,Session就失效了。不过在ASP.NET中可以在web.config中修改设置,使Session的传递脱离Cookie。方法是:

    

对于Cookie大家并不陌生,每个Cookie存储了多个名/值对,我们可以通过HttpCookie类的值集合来访问它,也可以间接地通过类所提供的索引器访问。Cookie在ASP.NET下的使用:

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  }

由于Cookie存储的信息是放到客户端的,用户在访问服务器端页面时,必然在客户端和服务器端之间频繁交换信息,影响了程序的性能。而Session由于存储在服务器内存中,因此不存在这个问题。不过,Session存储的信息是临时的,用户一旦关闭浏览器,状态即失去,而Cookie则相反。

以上就是ASP.NET中有哪些状态类型,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。


分享文章:ASP.NET中有哪些状态类型
网站地址:http://scyanting.com/article/jjgsic.html