Bài 8: Thiết kê và lập trình web với ASP.NET - Quản lý trạng tháng với ASP.NET

11 461 2
Bài 8: Thiết kê và lập trình web với ASP.NET - Quản lý trạng tháng với ASP.NET

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Thitk & Lp trình Web 2 Bài 8 QunQunlýlý TrngTrng tháithái vivi ASP .NETASP .NET Ths. TrnTh Bích Hnh Khoa CNTT Khoa CNTT –– H.KHTNH.KHTN © 2009 Khoa Công ngh thông tin Thitk & Lp trình Web 2 – Giithiumônhc NiNi dungdung NiNi dungdung  Giithiuv Qunlýtrng thái  Các đitng qunlýtrng thái ca ASP .NET – Client-based State – Server-based State  C ch Cache ca ASP .NET © 2009 Khoa CNTT - HKHTN 2 Thitk & Lp trình Web 2 – Giithiumônhc NiNi dungdung NiNi dungdung  Giithiuv Qunlýtrng thái  Các đitng qunlýtrng thái ca ASP .NET – Client-based State – Server-based State  C ch Cache ca ASP .NET © 2009 Khoa CNTT - HKHTN 3 Thitk & Lp trình Web 2 – Giithiumônhc QunQun lýlý TrngTrng tháithái QunQun lýlý TrngTrng tháithái  Mi ng dng web cn chia s thông tin gia các request  Giao thc HTTP là Stateless – Mi request gi đnserver đcxemlàmt request mi – Thông tin ca request trcs không tnti cho request sau  ASP .NET cung cpcácc ch cho phép qun thông ti i á t ti n g i ac á c reques t – Các đitng qunlýtrng thái (State) phía Client Server C h Ch – C  c h C ac h e © 2009 Khoa CNTT - HKHTN 4 Thitk & Lp trình Web 2 – Giithiumônhc NiNi dungdung NiNi dungdung  Giithiuv Qunlýtrng thái  Các đitng qunlýtrng thái ca ASP .NET – Client-based State – Server-based State  C ch Cache ca ASP .NET © 2009 Khoa CNTT - HKHTN 5 Thitk & Lp trình Web 2 – Giithiumônhc ClientClient based Statebased State ClientClient based Statebased State  Là các đitng trng thái đc lutr máy Client  Bao gm – ViewState – Hidden Fields – QueryStrings – Cookies © 2009 Khoa CNTT - HKHTN 6 Thitk & Lp trình Web 2 – Giithiumônhc ViewStateViewState ViewStateViewState  Duy trì thông tin trng thái ca các control trên mt trang web gia các ln postback xy ra web gia các ln postback xy ra  c mã hóa nhúng trong trang web didng n <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNjI3NjE4OTU5ZGTI7l3xKXYAdsL8nY4w0bddpzSkRQ" />  Không thích hp cho các control cha nhiud liunh GridView, Repeater… © 2009 Khoa CNTT - HKHTN 7 Thitk & Lp trình Web 2 – Giithiumônhc Enable & DisableEnable & Disable ViewStateViewState Enable & Disable Enable & Disable ViewStateViewState  Mc đnh ViewState đckíchhot (enable) cho ttc 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" … %>  Mts Control c bnnh 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 Thitk & Lp trình Web 2 – Giithiumônhc LpLp trìnhtrình QunQun lýlý ViewStateViewState LpLp trìnhtrình QunQun lýlý ViewStateViewState  Mc đích: lu thông tin b sung giacácln post-back trên cùng mt trang web trên cùng mt trang web  ViewState có th lutr d liuthuc kiuc s hoc kiu tham chiu ( đi tng - object) kiu tham chiu ( đi tng object)  Lu ViewState ( name – value ) Vi St t [" RtCt "] t  Truy xut ViewState (phi ép v kiu tng ng) Vi ew St a t e [" R eques tC oun t "] = coun t ; int count = (int)ViewState["RequestCount"]; © 2009 Khoa CNTT - HKHTN 9 Thitk & Lp trình Web 2 – Giithiumônhc Serialization &Serialization & DeserializationDeserialization Serialization & Serialization & DeserializationDeserialization  Thông tin trong ViewState đc serialize vào thi đim runtime đ lu tr sau đó deserialize đ khôi phc runtime đ lu tr sau đó deserialize đ khôi phc thành đitng ban đu – Serialization: Q ui trình chu y n đim  tob j ect san g m  tdã y Q y  jg  y bytes đ lutr – Deserialization: Qui trình khôi phc dãy bytes thành đitng b đ b an đ u   mt đitng có th serialize lutrđc trong ViewState ta phi b sung thuc tính Serializable vào đu ViewState , ta phi b sung thuc tính Serializable vào đu khai báo lp [Serializable] © 2009 Khoa CNTT - HKHTN public class Book { … } 10 Thitk & Lp trình Web 2 – Giithiumônhc VíVí dd VíVí dd 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 Thitk & Lp trình Web 2 – Giithiumônhc HiddenFieldHiddenField HiddenFieldHiddenField  Lutr trng thái trong WebForm gia các postback  Render v phía trình duytvith <input type=‘hidden’ />  Có th s dng hidden field đ lutr trng thái cacác control trong WebForm ngay c khi ViewState b disable  Ch thích hp trong viclutr d liuthucv kiuc s ( int, float, string, … ) © 2009 Khoa CNTT - HKHTN 12 Thitk & Lp trình Web 2 – Giithiumônhc QueryStringQueryString QueryStringQueryString  Là thông tin b sung thêm vào cuichui URL http://domain/pathfile?name1=value1&name2=value2  Quer y strin g đ  c Url encoded ( các k ý t  đ  cbi  tho  c yg  ( ý     duxuthin trong query string đu đc thay th ) http://www.whatever.com/file.aspx?p=resum%E9&name=John+Lock  Thông tin truyn đib giihn (IE – 2Kb)  Không thích hp truyn các thông tin bo mt Không thích hp truyn các thông tin bo mt  Nhn thông tin truynt Query string string name = Request QueryString [ “ name " ] ToString (); © 2009 Khoa CNTT - HKHTN string name = Request . QueryString [ name ] . ToString (); 13 Thitk & Lp trình Web 2 – Giithiumônhc CookiesCookies CookiesCookies  Là các thông tin (name – value) đc lu trong mthoc nhiu tp tin trên máy tính client nhiu tp tin trên máy tính client  Các tp tin cookies do Browser qunlý  Kích thc catp tin cookies có giihn (khong 4Kb)  Browser s tđng xóa file cookie vào thi đim đ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 dng lu các thông tin v Client đ tái s dng  nhng ln s dng sau : nhng ln s dng 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 Thitk & Lp trình Web 2 – Giithiumônhc CC chch hothot đngđng caca CookieCookie CC chch hothot đngđng caca CookieCookie  Browser Server trao đi cookie khi có request đnmt page bt k trong cùng mt site (domain) page bt k trong cùng mt site (domain)  Browser qunlýkhông cho cookie trong domain này truyn đn domain khác truyn đn domain khác  S lng file cookie trong mt domain có giihn (IE – 20 files ) ) © 2009 Khoa CNTT - HKHTN 15 Thitk & Lp trình Web 2 – Giithiumônhc HttpCookieHttpCookie HttpCookieHttpCookie  Lp đitng qun 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 ca Cookie – Value : Giá tr ca Cookie Value : Giá tr ca Cookie – Domain : domain cookie này thucv. – Expires : xác đnh thigiancóhiulcca Cookie – HasKeys : Cookie có tpgiátr con hay không – Values : tp các giá tr ca Cookie © 2009 Khoa CNTT - HKHTN 16 Thitk & Lp trình Web 2 – Giithiumônhc S dng CookiesS dng Cookies S dng CookiesS dng Cookies  Ghi cookies – Response.Cookies[cookie][(key)|.attribute] = value; • cookie: tên bin • ke y : tham s tù y ch  n, có thđ  t nhiu g iá tr  cho 1 cookie y y   g  • attribute: thuc tính (domain, path,….)  cgiátr cookies – value = Request.Cookies[cookie][(key)|.attribute] © 2009 Khoa CNTT - HKHTN 17 Thitk & Lp trình Web 2 – Giithiumônhc VíVí dd CookiesCookies đnđn VíVí dd 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 Thitk & Lp trình Web 2 – Giithiumônhc VíVí dd CookiesCookies cócó cáccác subkeysubkey VíVí dd 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 Thitk & Lp trình Web 2 – Giithiumônhc VíVí dd HttpCookieHttpCookie VíVí dd 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 Thitk & Lp trình Web 2 – Giithiumônhc NiNi dungdung NiNi dungdung  Giithiuv Qunlýtrng thái  Các đitng qunlýtrng thái ca ASP .NET – Client-based State – Server-based State  C ch Cache ca ASP .NET © 2009 Khoa CNTT - HKHTN 21 Thitk & Lp trình Web 2 – Giithiumônhc ServerServer based Statebased State ServerServer based Statebased State  Là các đitng trng thái đc lutr máy Server  Bao gm – Session – Application © 2009 Khoa CNTT - HKHTN 22 Thitk & Lp trình Web 2 – Giithiumônhc SessionSession SessionSession  Mt phiên làm vic (session) là mtchui các thao tác ca ngi dùng trên cùng mt web application ngi dùng trên cùng mt web application  Vimi phiên làm vicca client, s có mt Session Object đctora, – clutr trên server – Cung cpnhng thông tin v phiên làm vichin hành ca client client – c duy trì khi ngi dùng duytt WebForm sang WebForm khác trong cùng mtsite – B hykhi: • Ngi dùng tng minh thoát khi 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 Thitk & Lp trình Web 2 – Giithiumônhc SS dngdng SessionSession SS dngdng SessionSession  Khito/ Gán giá tr cho bin Session S i [“ ”] l S ess i on [“ name ”] = va l ue;  cd liut bin Session Object obj = (Object)Session[ “ name ” ]; Object obj = (Object)Session[ name ];  Qui đnh khong thigiantnticamt phiên làm vic Session.Timeout = minutes; Session.Timeout minutes;  Ly đnh danh ID duy nhtca phiên làm vic Session.SessionID  Hy phiên làm vic(hyc bind liu) Session.Abandon(); © 2009 Khoa CNTT - HKHTN 24 Thitk & Lp trình Web 2 – Giithiumônhc Ví dVí d KimtraQuyn đng nhpKimtraQuyn đng nhp Ví d Ví d Kim tra Quyn đng nhpKim tra Quyn đng nhp Làm th nào đ ngn không cho ng i dùng tr cp  Làm th nào đ ngn không cho ng  i dùng tr uy cp vào các trang web nu cha đng nhp?  Ýtng  Ý tng – Dùng các bin Session đ lu trng thái đng nhp ca ngi dùng: Session[“IsLogin”] = 0/1 : Lu trng thái đng nhp Session[“Username”] : Lu Tên đng nhp 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 Thitk & Lp trình Web 2 – Giithiumônhc Làm th nào đ ngn không cho ngi dùng truy cp vào Làm th nào đ ngn không cho ngi dùng truy cp vào các trang web nucha đng nhp?các trang web nucha đng nhp? các trang web nu cha đng nhp?các trang web nu cha đng nhp? 1 Khitogiátr mc đnh cho bin Session[ “ IsLogin ” ]=0(cha 1 . Khi to giá tr mc đnh cho bin Session[ IsLogin ] = 0 (cha đng nhp) //global.asax <script language="C#" runat="server"> void Session _ OnStart(Object sender, EventArgs E) { Session[“IsLogin"] = 0; } / < / script> © 2009 Khoa CNTT - HKHTN 26 Thitk & Lp trình Web 2 – Giithiumônhc Làm th nào đ ngn không cho ngi dùng truy cp vào Làm th nào đ ngn không cho ngi dùng truy cp vào các trang web nucha đng nhp?các trang web nucha đng nhp? các trang web nu cha đng nhp?các trang web nu cha đng nhp? 2 To trang Login aspx cho phép ngi dùng đng nhp 2 . To trang Login . aspx cho phép ngi dùng đng nhp – Nu kim tra thông tin đng nhp không đúng thì hin th thông báo yêu cu đng nhp li. – Ngclinu ÚNG thì dùng mt(hoc nhiu) bin Session Ngc li , nu ÚNG thì dùng mt (hoc nhiu) bin Session đ lu trng thái login thành công li. //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 nhpli!”); } © 2009 Khoa CNTT - HKHTN 27 Thitk & Lp trình Web 2 – Giithiumônhc Làm th nào đ ngn không cho ngi dùng truy cp vào Làm th nào đ ngn không cho ngi dùng truy cp vào các trang web nucha đng nhp?các trang web nucha đng nhp? các trang web nu cha đng nhp?các trang web nu cha đng nhp? 3. Trong ttc các trang munbomt, kimtrangi dùng đã login hay cha , nu cha thì redirect li trang login.aspx hay cha , nu cha thì redirect li 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 Thitk & Lp trình Web 2 – Giithiumônhc Làm th nào đ ngn không cho ngi dùng truy cp vào Làm th nào đ ngn không cho ngi dùng truy cp vào các trang web nucha đng nhp?các trang web nucha đng nhp? các trang web nu cha đng nhp?các trang web nu cha đng nhp? 4 To x khi ngi dùng logout 4 . To x khi ngi dùng logout  Reset trng thái login là cha đng nhp //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 Thitk & Lp trình Web 2 – Giithiumônhc ApplicationApplication ApplicationApplication  Qunlýd liu dùng chung trong cùng mt ng dng web  clutr trên server  Có th truy xutbittc các session trong site  Tnti trong sut chu trình sng ca ng dng web © 2009 Khoa CNTT - HKHTN 30 Thitk & Lp trình Web 2 – Giithiumônhc cc vàvà GhiGhi ApplicationApplication cc vàvà GhiGhi ApplicationApplication  Ghi thông tin Application["SiteRequestCount"] = 0; Application["SiteName“] = "www.site.com";  cni dung t Application State int count = (int)Application["SiteRequestCount"]; string name = (string)Application["SiteName"]; © 2009 Khoa CNTT - HKHTN 31 Thitk & Lp trình Web 2 – Giithiumônhc XX lýlý vnvn đđ truytruy xutxut đngđng thithi ApplicationApplication XX lýlý vnvn đđ truytruy xutxut đngđng thithi ApplicationApplication  Lock application state đ hnch lixy ra do victruy xut đn g thibi nhiu 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 Thitk & Lp trình Web 2 – Giithiumônhc KhiKhi toto ApplicationApplication KhiKhi toto ApplicationApplication  Khitobin 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 Thitk & Lp trình Web 2 – Giithiumônhc Ví dVí d –– ms ln duyt 1 trang webms ln duyt 1 trang web Ví d Ví d –– m s ln duyt 1 trang webm s ln duyt 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 ln vào trang này :" + Application[“SoLan"]); } © 2009 Khoa CNTT - HKHTN } 34 Thitk & Lp trình Web 2 – Giithiumônhc NiNi dungdung NiNi dungdung  Giithiuv Qunlýtrng thái  Các đitng qunlýtrng thái ca ASP .NET – Client-based State – Server-based State  C ch Cache ca ASP .NET © 2009 Khoa CNTT - HKHTN 35 Thitk & Lp trình Web 2 – Giithiumônhc CacheCache CacheCache  Cache là mt vùng b nh trên server/client/proxy lutr các thông tin thng xuyên s dng ca ng dng web các thông tin thng xuyên s dng ca ng dng web đ tái s dng cho các lntruycp sau mà không cnx li  Do đclutr trong b nh (memory) nên cho phép truy xut nhanh chóng  Nâng cao hiunng (performance) ca ng dng web  Có th lubtk kiud liu nào  Tnti trong khong thi gian qui đnh © 2009 Khoa CNTT - HKHTN 36 Thitk & Lp trình Web 2 – Giithiumônhc CC chch CacheCache CC chch CacheCache  Có 2 c ch Cache 1. Page Output Caching • Luktqu render trên mt WebForm s dng li  nhng ln re q uest sau q – Lu toàn b WebForm – Lumtphn WebForm 2. Application Data Caching • Cho p hé p l p trình lucácđitn g tron g Cache pp p g g © 2009 Khoa CNTT - HKHTN 37 Thitk & Lp trình Web 2 – Giithiumônhc Page Output CachingPage Output Caching Page Output CachingPage Output Caching  Lu toàn b trang web  – Thêm chđnh OutputCache vào đ  u trang ASPX • Duration: Thi gian (second) lu trang web • Location: Qui đnh ni lu cache: Any (default) Client Server Location: Qui đnh ni lu cache: Any (default) , Client , Server , ServerAndClient, DownStream, None • VaryByParam: Lu nhiu phiên bn khác nhau ca trang web ph thuc vào tham s truyn t querystring thuc vào tham s truyn t querystring <%@ OutputCache Duration="60" Location=“Server” VaryByParam="None"%> <%@ OutputCache Duration="60" VaryByParam=“CatId“ %> © 2009 Khoa CNTT - HKHTN 38 Thitk & Lp trình Web 2 – Giithiumônhc Page Output CachingPage Output Caching Page Output CachingPage Output Caching  Lumtphn trang web – Control caching • S dng Web User Control vich th OutputCache  đu trang ASCX – Post-cache substitution • Thitlp OutputCache cho toàn b trang web  • Qui đnh nhng vùng Substitution cho phép thay đ  ini dung © 2009 Khoa CNTT - HKHTN 39 Thitk & Lp trình Web 2 – Giithiumônhc VíVí dd PostPost cache Substitutioncache Substitution VíVí dd 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 . Qunlýtrng thái  Các đitng qunlýtrng thái ca ASP .NET – Client-based State – Server-based State  C ch Cache ca ASP .NET © 2009 Khoa CNTT - HKHTN 2 Thitk & Lp trình Web 2 – Giithiumônhc NiNi dungdung NiNi dungdung . Qunlýtrng thái  Các đitng qunlýtrng thái ca ASP .NET – Client-based State – Server-based State  C ch Cache ca ASP .NET © 2009 Khoa CNTT - HKHTN 3 Thitk & Lp trình Web 2 – Giithiumônhc QunQun lýlý TrngTrng tháithái QunQun lýlý TrngTrng tháithái . trang munbomt, kimtrangi dùng đã login hay cha , nu cha thì redirect li trang login.aspx hay cha , nu cha thì redirect li trang login.aspx //MyForm.aspx.cs void Page_Load(Object

Ngày đăng: 09/05/2014, 14:41

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan