Thi t k & L p trình Web 2
Bài 8
Qu n
Qu n lý lý Tr ng Tr ng thái thái v i v i ASP NET ASP NET
Ths Tr n Th Bích H nh
Khoa CNTT Khoa CNTT – – H.KHTN
© 2009 Khoa Công ngh thông tin
N i
N i dung dung
N i
N i dung dung
Gi i thi u v Qu n lý tr ng thái
Cácđ i t ng qu n lý tr ng thái c a ASP NET – Client-based State
– Server-based State
© 2009 Khoa CNTT - HKHTN
2
Thi t k & L p trình Web 2 – Gi i thi u môn h c
N i
N i dung dung
N i
N i dung dung
Gi i thi u v Qu n lý tr ng thái
Cácđ i t ng qu n lý tr ng thái c a ASP NET
– Client-based State
– Server-based State
Thi t k & L p trình Web 2 – Gi i thi u môn h c
Qu n
Qu n lý lý Tr ng Tr ng thái thái
Qu n
Qu n lý lý Tr ng Tr ng thái thái
M i ng d ng web c nchia s thông tin gi a các request
Giao th cHTTP là Stateless – M i request g i đ n server đ c xem là m t request m i – Thông tin c a request tr c s không t n t i cho request sau
ASP NET cung c p các c ch cho phép qu n lý thông
tin gi a các request – Các đ i t ng qu n lý tr ng thái (State) phía Client và Server
– C ch Cache
Trang 2N i
N i dung dung
N i
N i dung dung
Gi i thi u v Qu n lý tr ng thái
Cácđ i t ng qu n lý tr ng thái c a ASP NET
– Client-based State
– Server-based State
© 2009 Khoa CNTT - HKHTN
5
Client Client based State based State Client
Client based State based State
Là cácđ i t ng tr ng thái đ cl u tr máy Client
Bao g m – ViewState – Hidden Fields – QueryStrings – Cookies
© 2009 Khoa CNTT - HKHTN
6
Thi t k & L p trình Web 2 – Gi i thi u môn h c
ViewState
Duy trì thông tin tr ng thái c a các controltrênm t trang
webgi a các l n postbackx y ra
web gi a các l n postbackx y ra
< input type="hidden" name=" VIEWSTATE" id=" VIEWSTATE"
value="/wEPDwUJNjI3NjE4OTU5ZGTI7l3xKXYAdsL8nY4w0bddpzSkRQ"
/>
Không thích h p cho các control ch a nhi u d li u nh
GridView, Repeater…
Thi t k & L p trình Web 2 – Gi i thi u môn h c
Enable & Disable Enable & Disable ViewState ViewState Enable & Disable
Enable & Disable ViewState ViewState
M cđ nh ViewState đ c kích ho t(enable) cho t t c các Server controls
Disable ViewState
– Page Level
Control Level
<%@ Page EnableViewState="false" … %>
– Control Level
<asp:GridView EnableViewState="false" … %>
M t s Control c b n nh TextBox, DropDownList… luôn duy trì ViewStatecho dù ViewStateđã b Disable
duy trì ViewStatecho dù ViewStateđã b Disable
Trang 3L p
L p trình trình Qu n Qu n lý lý ViewState ViewState
L p
L p trình trình Qu n Qu n lý lý ViewState ViewState
M cđích: l uthông tin b sung gi a các l n post-back
trên cùng m t trang web
ViewState có th l u tr d li u thu cki u c 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 [" R tC t "] t
Truy xu t ViewState (ph iép v ki ut ng ng)
ViewState[" RequestCount "] = count;
int count = (int) ViewState[" RequestCount "];
© 2009 Khoa CNTT - HKHTN
9
Serialization &
Serialization & Deserialization Deserialization Serialization &
Serialization & Deserialization Deserialization
Thông tin trong ViewStateđ cserialize vào th iđi m runtimeđ l u tr và sauđódeserializeđ khôi ph c runtime đ l u tr và sauđódeserializeđ khôi ph c thànhđ i t ngban đ u
– Serialization: Qui trình chuy n Q y đ i m t object sang m t dãy j g y bytes đ l u tr
– Deserialization: Qui trình khôi ph c dãy bytes thành đ i t ng
ban đ u
m tđ i t ngcó th serialize và l u tr đ c trong ViewState ta ph ib sung thu c tính Serializable vàođ u ViewState, ta ph ib sung thu c tính Serializable vàođ u khai báo l p
[Serializable]
© 2009 Khoa CNTT - HKHTN
public class Book { … } 10
Thi t k & L p trình Web 2 – Gi i thi u môn h 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) ViewState [ "myBook"];
Label1.Text = book.ID + " " + book.BookName;
}
Thi t k & L p trình Web 2 – Gi i thi u môn h c
HiddenField
L u tr tr ng thái trong WebForm gi a các postback
Render v phía trình duy t v i th
<input type=‘hidden’ />
Có th s d ng hidden field đ l u tr tr ng tháic a các control trong WebFormngay c khi ViewState b disable
Ch thích h p trong vi c l u tr d li u thu c v ki u c
s ( int, float, string, … )
Trang 4Là thông tin b sung thêm vào cu i chu i URL
http://domain/pathfile?name1=value1&name2=value2
Query string y gđ cUrl encoded( các ký t( ý đ c bi t ho c
d u xu t hi 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đi b gi i h n(IE – 2Kb)
KhôngKhôngthích h p truy n các thông tinthích h p truy n các thông tin b o m tb o m t
Nh n thông tin truy n t Query string
string name = Request QueryString[“ name "] ToString();
© 2009 Khoa CNTT - HKHTN
string name = Request.QueryString[ name ] ToString();
13
Cookies
Là cácthông tin (name – value) đ cl u trongm t ho c nhi ut p tin trên máy tính client
nhi ut p tin trên máy tính client
Các t p tin cookies do Browser qu n lý
Kích th cc a t p tin cookies cógi i h n(kho ng 4Kb)
Browser s t đ ng xóafile cookie vào th iđi m đ c ch
đ nh trong thu c tínhExpiresc a cookie
ng d ngl 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 t k & L p trình Web 2 – Gi i thi u môn h c
C
C ch ch ho t ho t đ ng đ ng c a c a Cookie Cookie
C
C ch ch ho t ho t đ ng đ ng c a c a Cookie Cookie
Browser và Server traođ i cookie khi có request đ n m t
page b t k trongcùng m t site (domain)
page b t k trongcùng m t site (domain)
Browser qu n lýkhôngcho cookie trong domain này
truy nđ n domain khác
truy nđ n domain khác
S l ngfile cookie trong m t domain cógi i h n(IE – 20
files))
Thi t k & L p trình Web 2 – Gi i thi u môn h c
HttpCookie
L p đ i t ng qu n lý thông tin Cookie trong ASP.NET
Cá th tí h Htt C ki
Các thu c tính c a HttpCookie – Name : tên c a Cookie – Value : Giá tr c a Cookie – Domain : domain cookie này thu c v – Expires : xác đ nh th i gian có hi u l c c a Cookie – HasKeys : Cookie có t p giá tr con hay không – Values : t p các giá tr c a Cookie
Trang 5S d ng Cookies
S d ng Cookies
Ghi cookies
– Response Cookies [cookie][(key)|.attribute] = value;
• cookie: tên bi n
• key : tham s tùy ch n, có th y y đ t nhi u giá tr cho 1 cookie g
• attribute: thu c tính (domain, path,….)
c giá tr cookies
– value = Request Cookies [cookie][(key)|.attribute]
© 2009 Khoa CNTT - HKHTN
17
Ví
Ví d d Cookies Cookies đ n Ví
Ví d d Cookies Cookies đ n
Ghi
Response.Cookies[ "userName“ ].Value = "mike“;
Response.Cookies[ "userName“ ].Expires = DateTime.Now.AddDays(1);
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 t k & L p trình Web 2 – Gi i thi u môn h c
Ví
Ví d d Cookies Cookies có có các các subkey subkey
Ví
Ví d d Cookies Cookies có có các các subkey subkey
Ghi
Response.Cookies[ "userInfo“ ][ "userName“ ] = "mike“ ;
Response.Cookies[ "userInfo“ ][ "lastVisit“ ]=DateTime.Now.ToString();
Response.Cookies[ "userInfo“ ].Expires = DateTime.Now.AddDays(1);
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 );
Thi t k & L p trình Web 2 – Gi i thi u môn h c
Ví
Ví d d HttpCookie HttpCookie Ví
Ví d d HttpCookie HttpCookie
Ghi
HttpCookie cookie = new HttpCookie( “userInfo” );
cookie[ "userName“ ] = "mike“;
cookie[ "lastVisit“ ] = DateTime.Now.ToString();
cookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(cookie);
HttpCookie cookie = Request.Cookies[ "userInfo“ ];
if (cookie != null) { LabelUsername.Text = cookie[ "userName“ ];
LabelLastVisit.Text = cookie[ "lastVisit“ ];
} }
Trang 6N i
N i dung dung
N i
N i dung dung
Gi i thi u v Qu n lý tr ng thái
Cácđ i t ng qu n lý tr ng thái c a ASP NET
– Client-based State
– Server-based State
© 2009 Khoa CNTT - HKHTN
21
Server Server based State based State Server
Server based State based State
Là cácđ i t ng tr ng thái đ cl u tr máy Server
Bao g m – Session – Application
© 2009 Khoa CNTT - HKHTN
22
Thi t k & L p trình Web 2 – Gi i thi u môn h c
Session
M t phiên làm vi c (session) là m t chu 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 i m i phiên làm vi c c a client, s có m t Session
Object đ c t o ra,
– c l u tr trên server
– Cung c p nh ng thông tin v phiên làm vi c hi n hành c a
client
– c duy trì khi ng i dùng duy t t WebForm sang
WebForm khác trong cùng m t site
– B h y khi:
• Ng i dùng t ng minh thoát kh i session
• Sau m t kho ng th i gian (time-out) , m c Sau t o g t g a (t e out) , c đ nh là 20 phút đ à 0 p út
Thi t k & L p trình Web 2 – Gi i thi u môn h c
S d ng d ng Session Session
S d ng d ng Session Session
Kh i t o/ Gán giá tr cho bi n Session
Session[“name”] = value;
c d li u t bi n Session
Object obj = (Object)Session[“name”];
Object obj = (Object)Session[ name ];
Qui đ nh kho ng th i gian t n t i c a m t phiên làm vi c
Session.Timeout = minutes;
Session.Timeout minutes;
L y đ nh danh ID duy nh t c a phiên làm vi c
Session.SessionID
H y phiên làm vi c (h y c bi n d li u)
Session.Abandon();
Trang 7Ví d
Ví d Ki m tra Quy n Ki m tra Quy n đ ng nh p đ ng nh p
Ví d
Ví d Ki m tra Quy n Ki m tra Quy n đ ng nh p đ ng nh p
Làm th nào đ ng n không cho ng i dùng truy 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
S i [“A th ti ti ”] L L i đ h
Session[“Authentication”]: L u Lo i quy n đ ng nh p
…
© 2009 Khoa CNTT - HKHTN
25
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 u ch 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?
các trang web n u ch a đ ng nh p?
1 Kh i t o giá 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 t k & L p trình Web 2 – Gi i thi u môn h 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 u ch 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?
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 Ng c l i n u c l i, n u ÚNG thì dùng m t (ho c nhi u) bi n Session Ú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 p l i!”);
}
Thi t k & L p trình Web 2 – Gi i thi u môn h 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 u ch 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?
các trang web n u ch a đ ng nh p?
3 Trong t t c các trang mu n b o m t, ki m tra ng i dùng đã login hay ch a, n u ch a thì redirect l i trang login.aspx
//MyForm.aspx.cs void Page_Load(Object Src, EventArgs E){
i t D D Nh (I t32) S i [“I L i "]
int nDaDangNhap = (Int32) Session [“IsLogin "];
if (nDaDangNhap == 0)
Response.Redirect(“Login.aspx”);
}
Trang 8Là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 u ch 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?
các trang web n u ch a đ ng nh p?
4 T o x lý khi ng i dùng logout
4 T o x lý 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){
Session [“IsLogin"] = 0; g Response.Redirect(“Login.aspx”);
}
© 2009 Khoa CNTT - HKHTN
29
Application
Qu n lý d li u dùng chung trong cùng m t ng d ng web
Có th truy xu t b i t t c các session trong site
T n t i trong su t chu trình s ng c a ng d ng web
© 2009 Khoa CNTT - HKHTN
30
Thi t k & L p trình Web 2 – Gi i thi u môn h c
c
c và và Ghi Ghi Application Application
c
c và và Ghi Ghi Application Application
Ghi thông tin
Application ["SiteRequestCount"] = 0;
Application[ "SiteName“] = "www.site.com";
c n i dung t Application State
int count = (int)Application[ "SiteRequestCount"];
string name = (string)Application[ "SiteName"];
Thi t k & L p trình Web 2 – Gi i thi u môn h c
X lý lý v n v n đđ truy truy xu t xu t đ ng đ ng th i th i Application Application
X lý lý v n v n đđ truy truy xu t xu t đ ng đ ng th i th i Application Application
Lock application state đ h n ch l i x y ra do vi c truy
xu tđ ng th i b i nhi u client requestg q
Application Lock ();
if ( Application[ "SiteRequestCount"] == null) {
Application[ "SiteRequestCount"] = 0;
}
count = ( int) Application[ "SiteRequestCount"];
count++;
Application[ "SiteRequestCount"] = count;
Application UnLock ();
Trang 9Kh i
Kh i t o t o Application Application
Kh i
Kh i t o t o Application Application
Kh i t o bi 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 application startup pp p
Application[ "SiteRequestCount"] = 0;
Application[ "SiteName"] = "www.somesite.com";
}
</script>
© 2009 Khoa CNTT - HKHTN
33
Ví d
Ví d – – m s l n duy t 1 trang web
Ví d
Ví d – – 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 //Myform.aspx.cs
void Page_Load(Object Src, EventArgs E){
Application.Lock();
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 t k & L p trình Web 2 – Gi i thi u môn h c
N i
N i dung dung
N i
N i dung dung
Gi i thi u v Qu n lý tr ng thái
Cácđ i t ng qu n lý tr ng thái c a ASP NET
– Client-based State
– Server-based State
Thi t k & L p trình Web 2 – Gi i thi u môn h c
Cache
Cache là m tvùng b nh trên server/client/proxyl u tr cácthông tin th ng xuyên s d ngc a ng d ng web cácthông tin th ng xuyên s d ngc a ng d ng web
đ tái s d ng cho các l n truy c p sau mà không c n x
lý l i
Do đ c l u tr trong b nh (memory) nên cho phép truy xu t nhanh chóng
Nâng cao hi u n ng(performance) c a ng d ng web
Có th l u b t k ki u d li u nào
T n t i trong kho ng th i gian qui đ nh
Trang 10C ch ch Cache Cache
C
C ch ch Cache Cache
1 Page Output Caching
• L u k t qu render trên m t WebForm và s d ng l i nh ng l n
request sau q
– L u toàn b WebForm
– L u m t ph n WebForm
2 Application Data Caching
• Cho phép l p trình l u các p p p đ i t ng trong Cache g g
© 2009 Khoa CNTT - HKHTN
37
Page 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 Location: Qui đ nh n i l u cache: Any (default), Client, Server, đ 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 t k & L p trình Web 2 – Gi i thi u môn h c
Page Output Caching
L u m t ph n trang web
– Control caching
• S d ng Web User Control v i ch th OutputCache đ u trang
ASCX
– Post-cache substitution
• Thi t l p OutputCache cho toàn b trang web
• Qui đ nh nh ng vùng Substitution cho phép thay đ i n i dung
Thi t k & L p trình Web 2 – Gi i thi u môn h c
Ví
Ví d d Post Post cache Substitution cache Substitution Ví
Ví d d Post Post cache Substitution cache Substitution
<div id="cartBox">
<h2>Your Shopping Cart</h2>
S b i i id " bC " " “ h d " C " /
<asp:Substitution id="subCart" runat="server“ MethodName=" GetCart " />
</div>
public static string 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>";
}
return output;
}