打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
状态管理(ViewState、Cookie、Session、Application、Cache)
状态管理(ViewState、Cookie、Session、Application、Cache)
2010-08-06 23:18

状态管理(ViewState、Cookie、Session、Application、Cache)

速成部分:

viewstate["****"] & session["***"] 直接赋值及使用,不用声明。

   cookie:

设置:

    HttpCookie cookieInstance = new HttpCookie("mycookie");

    cookieInstance.Values.Add("name","权昌军");

    Response.Cooki.Add(Mycookie);

   读取:

    HttpCookie getCookie = Request.Cookie["mycookie"];

    string myName = cookie.Values["name"]; //此时,myName中的值是“权昌军”


--------------------------------------------------------------------------------

状态类型
客户端 或 服务器 资源
有效时间

ViewState
客户端
只在一个页面中

Cookie
客户端
关闭浏览器时会删除临时cookie,永久cookie存储在客户系统的磁盘上

Session
服务器
会话状态与浏览器会话相关。会话在超时后无效(默认为20分钟)

Application
服务器
应用程序状态在所有的客户端上共享,这个状态在服务器重启之前都是有效的

Cache
服务器
类似于应用程序状态,高速缓存是共享的。但是,是高速缓存无效有更好的控制方式

   ViewState:

        ViewState包含的状态与控件发送给客户端时 包含的状态相同。

        当浏览器把 窗体发送 回服务器时, 控件包含新值,而 ViewState包含初始值。如果ViewState中的初始值 与 控件中的新值有区别时,调用相应的事件处理程序。

        使用ViewState的缺点是,数据总是要从服务器 -> 客户端,再 客户端 -> 服务器。增加了网络流量。

        关闭ViewState的方法:

       

        还可以设置 控件的 EnableViewState属性。只有没有配置ViewState的控件才使用页面配置的值。

        还可以把定制的数据存储在ViewState中。为此,可使用索引符 和 Page类的ViewState属性。

ViewState["mydata"] = "my data";   //将字符串存储在 ViewState中

        读取:

string mydata = (string)ViewState["mydata"]; //将前面存储的值读取出来。

        在发送客户端的HTML代码中,整个页面的ViewState存储在一个隐藏字段中:

       

        使用隐藏字段的优点是,每个浏览器都能使用这个特征,用户不能关闭它。

Cookie:

        ViewState只能保存在页面中。如果状态应保存在多个不同的页面中,就应使用cookie在客户端保存状态。

cookie在HTTP头中定义。

使用HttpRespone类可以把cookie发给客户端。

Response是Page类的一个属性,它返回一个HttpResponse类型的对象。

HttpResponse类定义了返回HttpCookieCollection的Cookie属性。

使用HttpCookieCollection可以向客户端返回多个cookie。

如何把cookie发给客户端:

            string myval = "myval";

HttpCookie cookie = new HttpCookie("mycookie");   //首先实例化一个HttpCookie对象,并设置cookie的名称为“mycookie”

cookie.Values.Add("mystate",myval);                 // 用HttpCookie类的Value属性可以添加多个cookie值

Response.Cookie.Add(cookie);                        // 发送cookie

设置cookie有效期:

            cookie可以是临时的,仅在一个浏览器会话中有效,也可以是存储在客户端磁盘上。

            可以使用HttpCookie对象设置的Expires属性。

            HttpCookie cookie = new HttpCookie("mycookie");

            cookie.Values.Add("mystate","myval");

cookie.Expires = DateTime.Now.AddMonths(3);    // 设置cookie有效期为3个月

            Response.Cookies.Add(cookie);

        尽管设置了cookie,但不一定能存储那么长时间。

        用户可能会删除cookie;

        如果本地有太多的cookie,浏览器也可能删除它。

        浏览器只能为每个服务器存储 20 个cookie;为所有服务器 存储 300个cookie;

cookie大小有限制,cookie不能存储多于4K的数据。达到极限后,就删除有一段时间不用的cookie。

   读取客户端发送的cookie:

        客户从服务器请求页面时,相应的cookie就可以使用了。

        并作为HTTP请求的一部分发送给服务器。

        要读取cookie,可以访问HttpRequest对象的cookie集合。

        与HTTP响应一样,Page类也有一个Request属性 返回 HttpRequest类型的对象。

        Cookies属性返回HttpCookieCollection,它可以读取客户端发送的cookie。

        可以用索引符来访问cookie,并使用HttpCookie的value属性从cookie中获取值。

HttpCookie cookie = Request.Cookies["mycookie"];

string myval = cookie.Values["mystate"];

Session:

会话状态 与 浏览器会话相关。 当客户第一次打开ASP.NET页面时,会话就开始了。当客户20分钟(session默认值)内没有访问服务器时,会话结束。


        可以在Global Application类中定义自己的代码,在会话开始或结束时运行。新的Global Application类会创建global.asax文件。

文件中定义了一些事件处理程序:


    < runat="server">

            void Application_Start(object sender, EventArgs e) {......}


    void Application_End(object sender, EventArgs e) {......}

    .......

   

        会话状态可以存储在HttpSessionState对象中。

        与当前HTTP环境相关的会话状态对象可以使用Page类的Session属性来访问。

设置会话状态:

        void Session_Start(Object sender, EventArgs e) { Session["mydata"] = 0; }

// 在Session_Start()事件处理程序中,初始化会话变量,mydata会话被初始化为 0

读取会话状态:

int val = (int)Session["mydata"];

       要把客户端 与 会话变量 关联起来, ASP.NET默认使用一个临时cookie 和 一个会话标识符。

       ASP.NET也支持没有cookie的会话,其中URL标示符 用于把 HTTP请求映射到同一个会话。

    Application:

       如果数据要在多个客户端共享,就可以使用应用程序状态(Application)。比如,网站访问计数器。

       应用程序状态使用HttpApplicationState类,通过Page类的Application属性访问。

       以网站访问计数器为例:

设置状态:

void Application_start(object sender, EventArgs e) { Application["userCount"] = 0 ; }

// Application_Start()是global.asax文件中的事件处理方法,在启动网站的第一个页面时启动。


改变状态:

       void Session_Start(Object sender, EventArgs e)

       {

Application.Lock();                                // 应用程序状态改变之前,必须要用Lock()锁定,因为多个用户可以同时访问这个应用程序变量。

            Application["userCount"] = (int) Application["userCount"] +1;       

Application.UnLock();                          // 锁定 与 解锁之间的时间应尽量短,否则,其他人就得等解锁之后才能操作。

       }

读取状态:

label1.Text = Application["userCount"].ToString();

Cache:

        类似于Application,可以在多个客户端上共享。但Cache可以自定义何时失效。我们不是给每个请求读取文件或数据库,而是把数据存储在高速缓存(Cache)中。

        Cache使用System.Web.Caching名称空间 和 Cache类。

给Cache添加对象:

        Cache.Add("mycache", myobj, null, DateTime.MaxValue, TimeSpan.FromMinutes(10), CacheItemPriority.Normal, null );

        Page类的Cache属性返回一个Cache对象。使用Cache类的Add()方法可以把任意对象赋予高速缓存。

第一个参数,定义Cache项的名称;

第二个参数,是要被缓存的对象;

第三个参数,定义了依赖关系。比如,Cache依赖于一个文件,当文件改变时,高速缓存对象就失效,本例中没有依赖关系;

第四个参数,定义了Cache失效的绝对时间;

第五个参数,定义了Cache失效的相对时间;

第六个参数,定义了Cache的优先级,当需要删除Cache时,会根据优先级删除。优先级低的先删除。

最后一个参数,定义了一个方法,当删除Cache调用。当Cache依赖于一个文件时,就可以用该参数:文件改变时,删除Cache,调用方法,再次读取文件,重新建立Cache。

读取Cache:

        object o = Cache["mycache"];

        if(o == null)

            { //reload the cache }

        else

            { //use the cache

                MyClass myObj = (MyClass)o;

            }

        使用Cache属性返回的对象之前,必须检查结果是否为null,当高速缓存失效时,结果就是null。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Application、Cookie、Session和Cache
APPlication,Session,Cookie,ViewState和Cache之间的...
Application, Session, Cookie, Viewstate, Cache对象用法和区别(转)
Visual?C#?Web?应用程序示例主题(一)(MSDN整理)
在页面之间传递参数大全
页面间传递变量的方法及使用范围的讨论
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服