Thitk & Lp trình Web 2 Bài 8 QunQunlýlý TrngTrng tháithái vivi ASP .NETASP .NET Ths. TrnTh Bích Hnh Khoa CNTT Khoa CNTT –– H.KHTNH.KHTN © 2009 Khoa Công ngh thông tin Thitk & Lp trình Web 2 – Giithiumônhc NiNi dungdung NiNi dungdung Giithiuv Qunlýtrng thái Các đitng qunlýtrng thái ca ASP .NET – Client-based State – Server-based State C ch Cache ca ASP .NET © 2009 Khoa CNTT - HKHTN 2 Thitk & Lp trình Web 2 – Giithiumônhc NiNi dungdung NiNi dungdung Giithiuv Qunlýtrng thái Các đitng qunlýtrng thái ca ASP .NET – Client-based State – Server-based State C ch Cache ca ASP .NET © 2009 Khoa CNTT - HKHTN 3 Thitk & Lp trình Web 2 – Giithiumônhc QunQun lýlý TrngTrng tháithái QunQun lýlý TrngTrng tháithái Mi ng dng web cn chia s thông tin gia các request Giao thc HTTP là Stateless – Mi request gi đnserver đcxemlàmt request mi – Thông tin ca request trcs không tnti cho request sau ASP .NET cung cpcácc ch cho phép qun lý thông ti i á t ti n g i ac á c reques t – Các đitng qunlýtrng thái (State) phía Client và Server C h Ch – C c h C ac h e © 2009 Khoa CNTT - HKHTN 4 Thitk & Lp trình Web 2 – Giithiumônhc NiNi dungdung NiNi dungdung Giithiuv Qunlýtrng thái Các đitng qunlýtrng thái ca ASP .NET – Client-based State – Server-based State C ch Cache ca ASP .NET © 2009 Khoa CNTT - HKHTN 5 Thitk & Lp trình Web 2 – Giithiumônhc ClientClient based Statebased State ClientClient based Statebased State Là các đitng trng thái đc lutr máy Client Bao gm – ViewState – Hidden Fields – QueryStrings – Cookies © 2009 Khoa CNTT - HKHTN 6 Thitk & Lp trình Web 2 – Giithiumônhc ViewStateViewState ViewStateViewState Duy trì thông tin trng thái ca các control trên mt trang web gia các ln postback xy ra web gia các ln postback xy ra c mã hóa và nhúng trong trang web didng n <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNjI3NjE4OTU5ZGTI7l3xKXYAdsL8nY4w0bddpzSkRQ" /> Không thích hp cho các control cha nhiud liunh GridView, Repeater… © 2009 Khoa CNTT - HKHTN 7 Thitk & Lp trình Web 2 – Giithiumônhc Enable & DisableEnable & Disable ViewStateViewState Enable & Disable Enable & Disable ViewStateViewState Mc đnh ViewState đckíchhot (enable) cho ttc các Server controls các Server controls Disable ViewState PLl – P age L eve l Control Level <%@ Page EnableViewState="false" … %> – Control Level <asp:GridView EnableViewState="false" … %> Mts Control c bnnh TextBox, DropDownList… luôn duy trì ViewState cho dù ViewState đã b Disable © 2009 Khoa CNTT - HKHTN duy trì ViewState cho dù ViewState đã b Disable 8 Thitk & Lp trình Web 2 – Giithiumônhc LpLp trìnhtrình QunQun lýlý ViewStateViewState LpLp trìnhtrình QunQun lýlý ViewStateViewState Mc đích: lu thông tin b sung giacácln post-back trên cùng mt trang web trên cùng mt trang web ViewState có th lutr d liuthuc kiuc s hoc kiu tham chiu ( đi tng - object) kiu tham chiu ( đi tng object) Lu ViewState ( name – value ) Vi St t [" RtCt "] t Truy xut ViewState (phi ép v kiu tng ng) Vi ew St a t e [" R eques tC oun t "] = coun t ; int count = (int)ViewState["RequestCount"]; © 2009 Khoa CNTT - HKHTN 9 Thitk & Lp trình Web 2 – Giithiumônhc Serialization &Serialization & DeserializationDeserialization Serialization & Serialization & DeserializationDeserialization Thông tin trong ViewState đc serialize vào thi đim runtime đ lu tr và sau đó deserialize đ khôi phc runtime đ lu tr và sau đó deserialize đ khôi phc thành đitng ban đu – Serialization: Q ui trình chu y n đim tob j ect san g m tdã y Q y jg y bytes đ lutr – Deserialization: Qui trình khôi phc dãy bytes thành đitng b đ b an đ u mt đitng có th serialize và lutrđc trong ViewState ta phi b sung thuc tính Serializable vào đu ViewState , ta phi b sung thuc tính Serializable vào đu khai báo lp [Serializable] © 2009 Khoa CNTT - HKHTN public class Book { … } 10 Thitk & Lp trình Web 2 – Giithiumônhc VíVí dd VíVí dd protected void Page_Load(object sender, EventArgs e) { if(Page.IsPostBack==false) { Book book = new Book(1, "Harry Potter"); ViewState["myBook"] = book; } } protected void Button1_Click(object sender, EventArgs e) { Book book = (Book) V iewState["myBook"]; Label1.Text = book.ID + " " + book.BookName; } © 2009 Khoa CNTT - HKHTN 11 Thitk & Lp trình Web 2 – Giithiumônhc HiddenFieldHiddenField HiddenFieldHiddenField Lutr trng thái trong WebForm gia các postback Render v phía trình duytvith <input type=‘hidden’ /> Có th s dng hidden field đ lutr trng thái cacác control trong WebForm ngay c khi ViewState b disable Ch thích hp trong viclutr d liuthucv kiuc s ( int, float, string, … ) © 2009 Khoa CNTT - HKHTN 12 Thitk & Lp trình Web 2 – Giithiumônhc QueryStringQueryString QueryStringQueryString Là thông tin b sung thêm vào cuichui URL http://domain/pathfile?name1=value1&name2=value2 Quer y strin g đ c Url encoded ( các k ý t đ cbi tho c yg ( ý duxuthin trong query string đu đc thay th ) http://www.whatever.com/file.aspx?p=resum%E9&name=John+Lock Thông tin truyn đib giihn (IE – 2Kb) Không thích hp truyn các thông tin bo mt Không thích hp truyn các thông tin bo mt Nhn thông tin truynt Query string string name = Request QueryString [ “ name " ] ToString (); © 2009 Khoa CNTT - HKHTN string name = Request . QueryString [ name ] . ToString (); 13 Thitk & Lp trình Web 2 – Giithiumônhc CookiesCookies CookiesCookies Là các thông tin (name – value) đc lu trong mthoc nhiu tp tin trên máy tính client nhiu tp tin trên máy tính client Các tp tin cookies do Browser qunlý Kích thc catp tin cookies có giihn (khong 4Kb) Browser s tđng xóa file cookie vào thi đim đcch đ h t th tí h Ei ki đ n h t rong th u c tí n h E xp i res c acoo ki e ng dng lu các thông tin v Client đ tái s dng nhng ln s dng sau : nhng ln s dng sau : – Thông tin cá nhân trong hóa đn thanh toán Thông tin Username & Password © 2009 Khoa CNTT - HKHTN – Thông tin Username & Password – … 14 Thitk & Lp trình Web 2 – Giithiumônhc CC chch hothot đngđng caca CookieCookie CC chch hothot đngđng caca CookieCookie Browser và Server trao đi cookie khi có request đnmt page bt k trong cùng mt site (domain) page bt k trong cùng mt site (domain) Browser qunlýkhông cho cookie trong domain này truyn đn domain khác truyn đn domain khác S lng file cookie trong mt domain có giihn (IE – 20 files ) ) © 2009 Khoa CNTT - HKHTN 15 Thitk & Lp trình Web 2 – Giithiumônhc HttpCookieHttpCookie HttpCookieHttpCookie Lp đitng qun lý thông tin Cookie trong ASP.NET Cá th tí h Htt C ki Cá c th u c tí n h c a Htt p C oo ki e – Name : tên ca Cookie – Value : Giá tr ca Cookie Value : Giá tr ca Cookie – Domain : domain cookie này thucv. – Expires : xác đnh thigiancóhiulcca Cookie – HasKeys : Cookie có tpgiátr con hay không – Values : tp các giá tr ca Cookie © 2009 Khoa CNTT - HKHTN 16 Thitk & Lp trình Web 2 – Giithiumônhc S dng CookiesS dng Cookies S dng CookiesS dng Cookies Ghi cookies – Response.Cookies[cookie][(key)|.attribute] = value; • cookie: tên bin • ke y : tham s tù y ch n, có thđ t nhiu g iá tr cho 1 cookie y y g • attribute: thuc tính (domain, path,….) cgiátr cookies – value = Request.Cookies[cookie][(key)|.attribute] © 2009 Khoa CNTT - HKHTN 17 Thitk & Lp trình Web 2 – Giithiumônhc VíVí dd CookiesCookies đnđn VíVí dd Cookies Cookies đnđn Ghi Response.Cookies["userName“].Value = "mike“; Response.Cookies["userName“].Expires = DateTime.Now.AddDays(1); c if (Request.Cookies["userName“] != null) LabelUsername.Text = Request.Cookies["userName“].Value; Xó Xó a Response.Cookies["userName“].Expires=DateTime.Now.AddDays(-1); © 2009 Khoa CNTT - HKHTN 18 Thitk & Lp trình Web 2 – Giithiumônhc VíVí dd CookiesCookies cócó cáccác subkeysubkey VíVí dd Cookies Cookies cócó cáccác subkeysubkey Ghi Response.Cookies["userInfo“]["userName“] = "mike“; Response.Cookies[ "userInfo“]["lastVisit“]=DateTime.Now.ToString(); Response.Cookies[ "userInfo“].Expires = DateTime.Now.AddDays(1); c if (Request.Cookies["userInfo“] != null) { LabelUsername.Text = Request.Cookies["userInfo“]["userName“]; LabelLastVisit.Text = Request.Cookies[ "userInfo“]["lastVisit“]; } Xóa Response.Cookies["userInfo“].Expires = DateTime.Now.AddDays(-1); © 2009 Khoa CNTT - HKHTN 19 Thitk & Lp trình Web 2 – Giithiumônhc VíVí dd HttpCookieHttpCookie VíVí dd HttpCookieHttpCookie Ghi HttpCookie cookie = new HttpCookie(“userInfo”); cookie["userName“] = "mike“; cookie["lastVisit“] = DateTime.Now.ToString(); cookie.Expires = DateTime.Now.AddDays(1); Response.Cookies.Add(cookie); c HttpCookie cookie = Request.Cookies["userInfo“]; if (cookie != null) { LabelUsername.Text = cookie["userName“]; LabelLastVisit.Text = cookie["lastVisit“]; } © 2009 Khoa CNTT - HKHTN } 20 Thitk & Lp trình Web 2 – Giithiumônhc NiNi dungdung NiNi dungdung Giithiuv Qunlýtrng thái Các đitng qunlýtrng thái ca ASP .NET – Client-based State – Server-based State C ch Cache ca ASP .NET © 2009 Khoa CNTT - HKHTN 21 Thitk & Lp trình Web 2 – Giithiumônhc ServerServer based Statebased State ServerServer based Statebased State Là các đitng trng thái đc lutr máy Server Bao gm – Session – Application © 2009 Khoa CNTT - HKHTN 22 Thitk & Lp trình Web 2 – Giithiumônhc SessionSession SessionSession Mt phiên làm vic (session) là mtchui các thao tác ca ngi dùng trên cùng mt web application ngi dùng trên cùng mt web application Vimi phiên làm vicca client, s có mt Session Object đctora, – clutr trên server – Cung cpnhng thông tin v phiên làm vichin hành ca client client – c duy trì khi ngi dùng duytt WebForm sang WebForm khác trong cùng mtsite – B hykhi: • Ngi dùng tng minh thoát khi session • Sau m t kh o n g t h i g i a n (t im e - out) , m c đ nh l à 2 0 p h út © 2009 Khoa CNTT - HKHTN Sau t o g t ga (t e out) , c đ à 0 pút 23 Thitk & Lp trình Web 2 – Giithiumônhc SS dngdng SessionSession SS dngdng SessionSession Khito/ Gán giá tr cho bin Session S i [“ ”] l S ess i on [“ name ”] = va l ue; cd liut bin Session Object obj = (Object)Session[ “ name ” ]; Object obj = (Object)Session[ name ]; Qui đnh khong thigiantnticamt phiên làm vic Session.Timeout = minutes; Session.Timeout minutes; Ly đnh danh ID duy nhtca phiên làm vic Session.SessionID Hy phiên làm vic(hyc bind liu) Session.Abandon(); © 2009 Khoa CNTT - HKHTN 24 Thitk & Lp trình Web 2 – Giithiumônhc Ví dVí d KimtraQuyn đng nhpKimtraQuyn đng nhp Ví d Ví d Kim tra Quyn đng nhpKim tra Quyn đng nhp Làm th nào đ ngn không cho ng i dùng tr cp Làm th nào đ ngn không cho ng i dùng tr uy cp vào các trang web nu cha đng nhp? Ýtng Ý tng – Dùng các bin Session đ lu trng thái đng nhp ca ngi dùng: Session[“IsLogin”] = 0/1 : Lu trng thái đng nhp Session[“Username”] : Lu Tên đng nhp Si[“Athtiti”]LL i đ h S ess i on [“A u th en ti ca ti on ”] : L u L o i quy n đ ng n h p … © 2009 Khoa CNTT - HKHTN 25 Thitk & Lp trình Web 2 – Giithiumônhc Làm th nào đ ngn không cho ngi dùng truy cp vào Làm th nào đ ngn không cho ngi dùng truy cp vào các trang web nucha đng nhp?các trang web nucha đng nhp? các trang web nu cha đng nhp?các trang web nu cha đng nhp? 1 Khitogiátr mc đnh cho bin Session[ “ IsLogin ” ]=0(cha 1 . Khi to giá tr mc đnh cho bin Session[ IsLogin ] = 0 (cha đng nhp) //global.asax <script language="C#" runat="server"> void Session _ OnStart(Object sender, EventArgs E) { Session[“IsLogin"] = 0; } / < / script> © 2009 Khoa CNTT - HKHTN 26 Thitk & Lp trình Web 2 – Giithiumônhc Làm th nào đ ngn không cho ngi dùng truy cp vào Làm th nào đ ngn không cho ngi dùng truy cp vào các trang web nucha đng nhp?các trang web nucha đng nhp? các trang web nu cha đng nhp?các trang web nu cha đng nhp? 2 To trang Login aspx cho phép ngi dùng đng nhp 2 . To trang Login . aspx cho phép ngi dùng đng nhp – Nu kim tra thông tin đng nhp không đúng thì hin th thông báo yêu cu đng nhp li. – Ngclinu ÚNG thì dùng mt(hoc nhiu) bin Session Ngc li , nu ÚNG thì dùng mt (hoc nhiu) bin Session đ lu trng thái login thành công li. //Login.aspx.cs void btnLogin_Click(Object Src, EventArgs E) { if ([Thong tin dang nhap dung]) Session [“IsLogin"] = 1; else Response.Write(“Vui lòng nhpli!”); } © 2009 Khoa CNTT - HKHTN 27 Thitk & Lp trình Web 2 – Giithiumônhc Làm th nào đ ngn không cho ngi dùng truy cp vào Làm th nào đ ngn không cho ngi dùng truy cp vào các trang web nucha đng nhp?các trang web nucha đng nhp? các trang web nu cha đng nhp?các trang web nu cha đng nhp? 3. Trong ttc các trang munbomt, kimtrangi dùng đã login hay cha , nu cha thì redirect li trang login.aspx hay cha , nu cha thì redirect li trang login.aspx //MyForm.aspx.cs void Page_Load(Object Src, EventArgs E){ it DD Nh (I t32) S i [“ IL i "] i n t n D a D ang Nh ap = (I n t32) S ess i on [“ I s L og i n "] ; if (nDaDangNhap == 0) Response.Redirect(“Login.aspx”); } © 2009 Khoa CNTT - HKHTN 28 Thitk & Lp trình Web 2 – Giithiumônhc Làm th nào đ ngn không cho ngi dùng truy cp vào Làm th nào đ ngn không cho ngi dùng truy cp vào các trang web nucha đng nhp?các trang web nucha đng nhp? các trang web nu cha đng nhp?các trang web nu cha đng nhp? 4 To x lý khi ngi dùng logout 4 . To x lý khi ngi dùng logout Reset trng thái login là cha đng nhp //MyForm.aspx.cs void btnLogout_Click(Object Src, EventArgs E){ S ession [“IsLo g in"] = 0; g Response.Redirect(“Login.aspx”); } © 2009 Khoa CNTT - HKHTN 29 Thitk & Lp trình Web 2 – Giithiumônhc ApplicationApplication ApplicationApplication Qunlýd liu dùng chung trong cùng mt ng dng web clutr trên server Có th truy xutbittc các session trong site Tnti trong sut chu trình sng ca ng dng web © 2009 Khoa CNTT - HKHTN 30 Thitk & Lp trình Web 2 – Giithiumônhc cc vàvà GhiGhi ApplicationApplication cc vàvà GhiGhi ApplicationApplication Ghi thông tin Application["SiteRequestCount"] = 0; Application["SiteName“] = "www.site.com"; cni dung t Application State int count = (int)Application["SiteRequestCount"]; string name = (string)Application["SiteName"]; © 2009 Khoa CNTT - HKHTN 31 Thitk & Lp trình Web 2 – Giithiumônhc XX lýlý vnvn đđ truytruy xutxut đngđng thithi ApplicationApplication XX lýlý vnvn đđ truytruy xutxut đngđng thithi ApplicationApplication Lock application state đ hnch lixy ra do victruy xut đn g thibi nhiu client re q uest g q Application.Lock(); if (Application["SiteRequestCount"] == null) { Application["SiteRequestCount"] = 0; } count = (int)Application["SiteRequestCount"]; count++; count++; Application["SiteRequestCount"] = count; Application.UnLock(); © 2009 Khoa CNTT - HKHTN 32 Thitk & Lp trình Web 2 – Giithiumônhc KhiKhi toto ApplicationApplication KhiKhi toto ApplicationApplication Khitobin Application trong file Global.asax <% @ Application Language =" C# " %> <% @ Application Language C# %> <script runat="server"> void Application_Start(object sender, EventArgs e) { // Code that runs on a pp lication startu p pp p Application["SiteRequestCount"] = 0; Application["SiteName"] = "www.somesite.com"; } </script> © 2009 Khoa CNTT - HKHTN 33 Thitk & Lp trình Web 2 – Giithiumônhc Ví dVí d –– ms ln duyt 1 trang webms ln duyt 1 trang web Ví d Ví d –– m s ln duyt 1 trang webm s ln duyt 1 trang web //global.asax <script language="C#" runat="server"> void Application_OnStart(Object sender, EventArgs E) { Application[“SoLan"] = 0; } } </script> // M form asp cs // M y form . asp x. cs void Page_Load(Object Src, EventArgs E){ Application.Lock(); Application[ “ SoLan " ] = (Int32) Application [ “ SoLan " ]+1; Application[ SoLan ] = (Int32) Application [ SoLan ] + 1; Application.UnLock(); Response.Write(“S ln vào trang này :" + Application[“SoLan"]); } © 2009 Khoa CNTT - HKHTN } 34 Thitk & Lp trình Web 2 – Giithiumônhc NiNi dungdung NiNi dungdung Giithiuv Qunlýtrng thái Các đitng qunlýtrng thái ca ASP .NET – Client-based State – Server-based State C ch Cache ca ASP .NET © 2009 Khoa CNTT - HKHTN 35 Thitk & Lp trình Web 2 – Giithiumônhc CacheCache CacheCache Cache là mt vùng b nh trên server/client/proxy lutr các thông tin thng xuyên s dng ca ng dng web các thông tin thng xuyên s dng ca ng dng web đ tái s dng cho các lntruycp sau mà không cnx lý li Do đclutr trong b nh (memory) nên cho phép truy xut nhanh chóng Nâng cao hiunng (performance) ca ng dng web Có th lubtk kiud liu nào Tnti trong khong thi gian qui đnh © 2009 Khoa CNTT - HKHTN 36 Thitk & Lp trình Web 2 – Giithiumônhc CC chch CacheCache CC chch CacheCache Có 2 c ch Cache 1. Page Output Caching • Luktqu render trên mt WebForm và s dng li nhng ln re q uest sau q – Lu toàn b WebForm – Lumtphn WebForm 2. Application Data Caching • Cho p hé p l p trình lucácđitn g tron g Cache pp p g g © 2009 Khoa CNTT - HKHTN 37 Thitk & Lp trình Web 2 – Giithiumônhc Page Output CachingPage Output Caching Page Output CachingPage Output Caching Lu toàn b trang web – Thêm chđnh OutputCache vào đ u trang ASPX • Duration: Thi gian (second) lu trang web • Location: Qui đnh ni lu cache: Any (default) Client Server Location: Qui đnh ni lu cache: Any (default) , Client , Server , ServerAndClient, DownStream, None • VaryByParam: Lu nhiu phiên bn khác nhau ca trang web ph thuc vào tham s truyn t querystring thuc vào tham s truyn t querystring <%@ OutputCache Duration="60" Location=“Server” VaryByParam="None"%> <%@ OutputCache Duration="60" VaryByParam=“CatId“ %> © 2009 Khoa CNTT - HKHTN 38 Thitk & Lp trình Web 2 – Giithiumônhc Page Output CachingPage Output Caching Page Output CachingPage Output Caching Lumtphn trang web – Control caching • S dng Web User Control vich th OutputCache đu trang ASCX – Post-cache substitution • Thitlp OutputCache cho toàn b trang web • Qui đnh nhng vùng Substitution cho phép thay đ ini dung © 2009 Khoa CNTT - HKHTN 39 Thitk & Lp trình Web 2 – Giithiumônhc VíVí dd PostPost cache Substitutioncache Substitution VíVí dd PostPost cache Substitutioncache Substitution <div id="cartBox"> <h2>Your Shopping Cart</h2> Sb i i id " bC " "“ hd " GC "/ <asp: S u b st i tut i on id = " su bC art " runat= " server “ Met h o d Name= " G et C art " / > </div> bli i i ( ) pu bli c stat i c str i ng GetCart ( HttpContext context ) { ShoppingCart cart = (ShoppingCart)context.Session["Cart"]; // Handle missing cart … // Output the cart item markup for this session to a string string output = ""; foreach (CartItem item in cart) { { output += "<p class='cartRow'>"; output += item.Name + "</p>"; } t tt © 2009 Khoa CNTT - HKHTN 40 re t urn ou t pu t ; } [...]...Thi t k & L p trình Web 2 – Gi i thi u môn h c Thi t k & L p trình Web 2 – Gi i thi u môn h c Application Data Caching T ng k t Client-based State Using System .Web. Caching; – Vi St t ViewState Ghi d li u vào Cache – HiddenField Book b = new Book(1, “Harry Potter”); – QueryString Cache[“book"] C h [“b k"] = b b; Qui – Cookies nh th i gian t n t i c a Cache Server-based State Cache.Insert(... DateTime.Now.AddMinutes(2.0), Cache.NoSlidingExpiration); // expire trong vòng 2 phút Cache – Page Output Caching c d li u t Cache – Application Data Caching Book b = (Book)Cache[“book"]; 41 © 2009 Khoa CNTT - HKHTN 42 © 2009 Khoa CNTT - HKHTN . Qunlýtrng thái Các đitng qunlýtrng thái ca ASP .NET – Client-based State – Server-based State C ch Cache ca ASP .NET © 2009 Khoa CNTT - HKHTN 2 Thitk & Lp trình Web 2 – Giithiumônhc NiNi dungdung NiNi dungdung . Qunlýtrng thái Các đitng qunlýtrng thái ca ASP .NET – Client-based State – Server-based State C ch Cache ca ASP .NET © 2009 Khoa CNTT - HKHTN 3 Thitk & Lp trình Web 2 – Giithiumônhc QunQun lýlý TrngTrng tháithái QunQun lýlý TrngTrng tháithái . trang munbomt, kimtrangi dùng đã login hay cha , nu cha thì redirect li trang login.aspx hay cha , nu cha thì redirect li trang login.aspx //MyForm.aspx.cs void Page_Load(Object