Session,Cookie,Application和ViewState的区别

一、Application
使用它时要注意避免性能的降低,存储的数据尽可能提供给客户只读的功能。

使用:
Global.asax:

<%@ Application Language="C#" %>

<script runat="server">

void Application_Start(object sender, EventArgs e)
{
Application["exp"] = "aaaa"; //object类型
}
</script>

使用:读操作
string str = Application["Exp"].ToString();

使用:写操作
Application.Lock();
Application["Exp"] = "write";
Application.UnLock();

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

二、Session
Session["Exp"] = "write";

Session State被同一个进程和AppDomain(App域)维护。Session State的特点是为每一个特定的客户创建状态以维护客户的信息,这些状态信息存储在服务器端的默认的会话状态配置中。
Asp.Net提供了一种加密机制和编码算法生成自己的Session Key。这是非常必要的,因为知道了你的Session Key,就有权限访问指定的页面了。
但是Session和客户端的Cookie是有关的,当客户关掉Cookie时,Session就失效了。

三、HttpCookie
使用:赋值
if (Request.Cookies["Expr"] == null)
{
HttpCookie cokExpr = new HttpCookie("Expr");
cokExpr.Value = "write";
Response.Cookies.Add(cokExpr);
}

使用:取值
string str = Request.Cookies["Expr"].Value;

每个Cookie存储了多个名/值对,我们可以通过HttpCookie类的值集合来访问它,也可以间接地通过类所提供的索引器访问
由于Cookie存储的信息是放到客户端的,用户在访问服务器端页面时,必然在客户端和服务器端之间频繁交换信息,影响了程序的性能。而Session由于存储在服务器内存中,因此不存在这个问题。不过,Session存储的信息是临时的,用户一旦关闭浏览器,状态即失去。而Cookie则相反。

四、ViewState
主要是指控件和页面的状态信息,它以_VIEWSTATE值传递给服务器端

ViewState["Exp"] = "write";
string str = ViewState["Expr"].ToString();

Application、Session和Cookie,可以借用Carfield的总结:
COOKIE 是本地文件,是 40 大盗在阿里巴巴家做的记号,或者是送牛奶的人在你家门口钉的箱子。
SESSION 是服务器端内存,是你洗澡时浴池发给你的钥匙。自己专用,可以开自己的好多箱子。
APPLICATION 是公共浴池。在这里能看见所有人

方法 信息量大小 保存时间 应用范围 保存位置
Application 任意大小 整个应用程序的生命期 所有用户 服务器端
Session 小量、简单的数据 用户活动时间+一段延迟时间(一般为20分钟) 单个用户 服务器端
Cookie 小量、简单的数据 可以根据需要设定 单个用户 客户端
Viewstate 小量、简单的数据 一个Web页面的生命期 单个用户 客户端
Cache 任意大小 可以根据需要设定 所有用户 服务器端
隐藏域 小量、简单的数据 一个Web页面的生命期 单个用户 客户端
查询字符串 小量、简单的数据 直到下次页面的跳转请求 单个用户 客户端
Web.Config文件 不变、或极少改奕的小量数据 直到配置文件被更新 所有用户 服务器端

你可能感兴趣的:(session,application,cookie,休闲,ViewState)