Session,Cookie,Application和ViewState的区别

来源:互联网 发布:手机淘宝怎么添加地址 编辑:程序博客网 时间:2024/05/15 06:03

一、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文件不变、或极少改奕的小量数据直到配置文件被更新所有用户服务器端

原创粉丝点击