Session,Cookie,Application和ViewState的区别
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、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类,它提供了读/写锁的两种属性。
在下,隐式地调用了AcquireWrite()和AcquireRead()方法以保证避免上面的问题。
当然,我们也可以显示地使用Lock()和Unlock():
二、Session
Session["Exp"] = "write";
Session State被同一个进程和AppDomain(App域)维护。
Session State的特点是为每一个特定的客户创建状态以维护客户的信息,这些状态信息存储在服务器端的默认的会话状态配置中。
提供了一种加密机制和编码算法生成自己的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文件不变、或极少改奕的
小量数据
直到配置文件被更新
所有
用户
服务
器端。