Demo Query String Tạo một ứng dụng truy cập CSDL GameList gồm: o GameList.aspx: hiển thị tên tất cả các game có trong database, với mỗi game tạo url dạng querystring với id của game đ
Trang 2Chương 3:
ASP.NET Application & State Management
Trang 4Tổng quan
Trang 5Request Object
Request là một thể hiện của lớp HttpRequest, Browser
dùng Request object để gửi thông tin cần thiết tới
Server
Dùng để đọc thông tin từ client gửi lên (header, query
string, cookies, …)
Data
Trang 6Request Object (tt)
Các thuộc tính
RequestType: trả về phương thức truyền dữ liệu từ
client đến server gồm 2 phương thức POST và GET
Cú pháp
valMethod=Request RequestType
Trang 7Lấy dữ liệu gửi đi
Trang 8Request Object - POST
Ví dụ: thiết kế giao diện như hình
Trang 9<tr><td style="width: 100px" colspan="2"><asp:Button ID="Button1"
runat="server" Text="Button" PostBackUrl=" ~/Default2.aspx "/></td></tr>
</table>
</form>
</body></html>
Trang 10Request Object - POST
Ví dụ (tt):
Lấy giá trị của UserName và Password trên form
string sUser, sPass;
sUser = Request.Form ["txtUser"];
sPass = Request.Form ["txtPass"];
//Xuất ra màn hình
Trang 11Request Object - GET
Cú pháp:
Nếu tham số không có giá trị thì giá trị trả về của tham
số khi sử dụng Request.QueryString là null
Request.QueryString[“ varName ”]
Trang 12Request Object - GET
< form method =“ Get " action =“CheckUser.aspx">
UserName: < input type ="text" name ="txtUser" />< br / Password: < input type ="password" name ="txtPwd" />< br />
< input type ="Submit" name ="btnLogin" value ="Login" />< br />
</ form >
Trang 13Request Object - GET
Tại Server (file CheckUser.aspx), lấy giá trị của
UserName và Password
string strUser, strPws;
strUser = Request.QueryString["txtUser"];
strPws = Request.QueryString["txtPass"];
Trang 14Request Object - GET
Hoặc
<a href=“ReadNews.aspx?CatID=edu&NewsID=98708”>
Tin Giáo dục
</a>
Var1=Request.QueryString[“ CatID ”];// Var1=edu
Var2=Request.QueryString[“ NewsID ”];// Var2=98708
T ại ReadNews.aspx m uốn lấy giá catID and NewsID , s ử
dụng cú pháp :
Trang 15Demo Query String
Tạo một ứng dụng truy cập CSDL GameList
gồm:
o GameList.aspx: hiển thị tên tất cả các game
có trong database, với mỗi game tạo url dạng querystring với id của game đó, user kích vào
sẽ mở ra trang GameDetail.aspx cho phép xem chi tiết thông tin của game đó
o GameDetail.aspx: lấy id từ querystring, đọc
CSDL GameList và trả về chi tiết tất cả thông tin của game.
Trang 16Query String
Trang 17Query String
Tạo trang GameList.aspx
o Trang này có control là label sẽ hiển thị danh sách các tên game.
Label: có id là “lblGameList”
Trang 18Query String
Trang GameList.aspx khi thực thi
Danh sách các tên game lấy trong database
Hyperlink xem chi tiết của “Thuận Thiên Kiếm”
Trang 19Query String
Tạo trang GameDetail.aspx
o Trang này có 4 label chứa các thông tin chi tiết của game:
• Tên game: lblTenGame , nhà sản xuất: lblNSX , nhà phát hành: lblNPH , thể loại: lblTheLoai
Trang 20SqlCommand cmd = new SqlCommand(query, conn);
SqlDataReader reader;
reader = cmd.ExecuteReader(); // thực thi câu truy vấn // phần tiếp theo trong slide kế…
Trang 21Query String
// tiếp theo của silde trước
if (reader.HasRows) // nếu có dữ liệu {
reader.Read(); // đọc 1 dòng dữ liệu lblTenGame.Text = reader["TenGame"].ToString();
lblNSX.Text = reader["NhaSanXuat"].ToString();
lblNPH.Text = reader["NhaPhatHanh"].ToString();
lblTheLoai.Text = reader["TheLoai"].ToString();
} reader.Close(); conn.Close(); // đóng kết nối }
catch (Exception ex) {
Response.Write(ex.Message); // hiển thị thông báo lỗi }
} // end if (sid !=null) } // end method Page_Load
Trang 22Query String
Chạy demo
id = 5 là mã game Cổ Long
Trang 23Response Object
nội dung (một xâu) bất kỳ về cho trình duyệt
Trang 24Response Object (tt)
Các phương thức
Response.Clear(): Xóa vùng tạm
Cú pháp:
Response.Flush() dùng để đưa dữ liệu còn trong bộ
đệm phía server về cho phía trình duyệt
Response.End(): Kết thúc tiến trình xử lý trên Server và
đẩy dữ liệu tới Client
Response.Clear()
Trang 25Response Object
Các thuộc tính
Buffer: có 2 giá trị true và false quy định cách
truyền tải dữ liệu:
o True : Hoàn tất công việc và gửi một lần
o False : Thực hiện xong đến đâu thì gửi đến đó
Trang 26Server Object
Đối tượng Server cung cấp thông tin của Web server choứng dụng, bao gồm các phương thức giúp chuyển điều khiểngiữa các trang với nhau, lấy thông tin về mã lỗi, encode, …
Các thuộc tính
o MachineName : tên server
o ScriptTimeout : thiết lập thời gian xử lý tối đa 1 file
Ví dụ:
Server.ScriptTimeout = 100s //thiết lập thời gian mặc định
Trang 27Server Object
Các phương thức
MapPath(“URL”): ánh xạ đường dẫn ảo thành đường
dẫn vật lý cho một tập tin trên Server
Trang 28Server Object
Transfer: gửi tất cả thông tin mà nó đã xử lý từ trang
ASPX hiện hành sang trang ASPX khác Cú pháp:
Trong đó, tham số path là đường dẫn của tập tin ASPX
cần chuyển điều khiển
o sử dụng ký hiệu “~” để chỉ đến đường dẫn tương đối
o sử dụng ký hiệu “ ” để chỉ đến đường dẫn tuyệt đối
Server Transfer (path)
Phân biệt Server.Tranfer vs Reponse.Redirect
Trang 30Server Object
Khi mã hoá chuỗi HTML sang chuỗi bình
thường nếu gặp các ký tự như sau sẽ chuyển
sang ký tự tương ứng:
o Ký tự <chuyển thành <
o Ký tự >chuyển thành >
o Ký tự & chuyển thành &
o Dấu đôi “ chuyển thành "
Trang 32Server Object
Phương thức URLEncode: Tương tự như
URLEcode dùng để mã hoá URL thành chuỗi
Cú pháp:
Quy tắc chuyển:
o Ký tự khoảng trắng chuyển thành dấu +
o Ký tự không thuộc ký tự chữ và số sẽ chuyển thành
số hexadecimal
Server URLEncode (str)
Trang 33Quản lý trạng thái
Trang 34Quản lý trạng thái
Mỗi ứng dụng cần chia sẽ thông tin giữa các
request
ASP.NET cung cấp các cơ chế cho phép chia
sẽ thông tin giữa các Request:
o Các đối tượng quản lý trạng thái (State) phía client và server.
o Cơ chế Cache
Trang 35Các đối tượng quản lý trạng thái
Client-based State
o Được lưu trữ ở máy Client
o Gồm: ViewStates, Hidden Fields, QueryStrings, Cookies
Server-based State
o Được lưu trữ ở máy Server
o Gồm: Session, Application
Trang 36View state
Cho phép lưu các kiểu dữ liệu của NET
Lưu trữ ở client side, trong hidden field của trang web
Lưu trữ trong các lần post back của trang Mất dữ liệu
khi user nhập vào URL mới
Phạm vi giới hạn trong một trang web
Bảo mật: mặc định ở trạng thái insecure Tuy nhiên ta
có thể thiết lập page directive để mã hóa
Hạn chế: lưu trữ số lượng lớn thông tin trong viewstate
sẽ làm chậm thời gian response và request
Thường dùng để cài đặt thông tin đặc biệt nào đó của
page
Trang 37View state
View state là ưu tiên chọn lựa đầu tiên khi cần lưu trữ
thông tin trong phạm vi của một trang web
View state cũng được sử dụng bởi ASP.NET Web
control, cho phép các control này duy trì những thuộc tính giữa các lần postback
Có thể add dữ liệu vào
view state collection thông qua thuộc tính Page.ViewState
int count;
if (ViewState["Count"] == null) count = 0;
else count = (int) ViewState["Count"]; count += 1;
ViewState["Count"] = count;
Label1.Text = string.Format("Số lần postback {0}", count);
Trang 38View state
Thuận lợi:
View state không sử dụng memory trên server
View state cũng không bị ràng buộc nào (như time out)
Tình huống hạn chế khi sử dụng view state
Cần thiết lưu trữ dữ liệu có mức độ nhạy cảm cao View state cũng có thể mã hóa, nhưng session lựa chọn tốt hơn
Cần thiết lưu trữ thông tin được sử dụng trong nhiều trang Trong tình huống này ta sử dụng session , cookie hoặc
query string
Cần thiết lưu trữ thông tin lớn và không muốn làm chậm thời gian truyền tải, nên sử dụng database , cache hoặc
session
Trang 40Session là gì?
Khái niệm phiên làm việc
• Mỗi khi user request một trang web lần đầu tiên thì
phiên làm việc được tạo ra.
• Một nhận dạng phiên làm việc được cấp bởi server
• Phiên làm việc kết thúc khi
Trang 41 Cho phép lưu trữ dữ liệu kiểu NET
Lưu trữ trên bộ nhớ của server
Thời gian sống kết thúc sau một khoảng thời gian định
nghĩa trước (thường là 20 phút, có thể thay đổi, hoặc lập trình hủy)
Phạm vi toàn bộ ứng dụng NET
Tính bảo mật cao, do dữ liệu lưu trữ trên server, không
bao giờ chuyển cho client và mỗi client có client session
id riêng
Lưu trữ session với dữ liệu lớn cũng có thể làm chậm
server, đặc biệt nếu nhiều người truy cập đồng thời, do mỗi user sẽ có bản copy session riêng!
Trang 43Session – cấu hình
• Thời gian sống của session có thể thiết lập thông qua
web.config (đơn vị là phút)
• Session có thể làm việc mà không cần cookie
• Trong trường này Session ID lưu trữ trong URL
Trang 44Phương thức
Abandon(): giải phóng vùng nhớ được dùng để duy trì
đối tượng Session trên Web Server ngay khi được gọithực hiện Những yêu cầu sau đó được Web server coinhư là một người dùng mới
Remove(“SessionName”): xoá dữ liệu trên biến
“VarSession”
RemoveAll(): Xoá dữ liệu, nhưng sessionID vẫn tồn tại
Trang 45Ví dụ: Tạo trang (Page) hoặc User Control là Login.aspx
Thiết kế giao diện như sau:
Trang 46Khởi tạo và Huỷ thông tin đăng nhập của người dùng trong Session
void Session_Start (object sender, EventArgs e)
Trang 47protected void btnLogin_Click (object sender, EventArgs e)
{
if ( Authority (txtUserName.Text, txtPassword.Text)) {
// Lưu thông tin đăng nhập thành công vào Session
Session ["LOGIN_OK"] = true;
// Ẩn chức năng Login
panelLogin.Visible = false;
// Hiển thị chức năng logout và lời chào mừng
LblGreeting.Text = "Chào mừng bạn " + txtUserName.Text + " đã đăng nhập website!";
} else {
// Lưu thông tin đăng nhập thất bại vào Session
Session ["LOGIN_OK"] = false;
} }
Trang 49• Là mẫu tin nhỏ (dạng chuỗi) dùng để lưu trữ thông tin
người dùng trên máy của client (trong bộ nhớ hoặc file
Trang 50Để thiết lập một cookie:
• Tạo đối tượng System.Net.HttpCookie
• Tạo dữ liệu dạng chuỗi
• Add đối tượng cookie vào đối tượng Response của
trang web hiện tại
HttpCookie cookie = new HttpCookie(“Account");
cookie[“Username"] = “Nguyen Mai Chi";
Response.Cookies.Add(cookie);
HttpCookie cookie = new HttpCookie(“Account");
cookie[“Username"] = “Nguyen Mai Chi";
Response.Cookies.Add(cookie);
Trang 51Để truy cập cookie
• Sử dụng đối tượng Request để lấy cookie
• Kiểm tra xem cookie khác null?
• Truy cập giá trị cookie qua thuộc tính key
Trang 52• Persistent cookies/permanent cookie
• Lưu trữ trong đĩa cứng của client cho đến khi hết hạn, dạng cookie này được thiết lập ngày hết hạn (expiration date)
• Non persistent cookie/temporary cookie
• Không định nghĩa thời gian hết hạn, cookie được lưu trữ trong browser memory, kết thúc khi đóng trình duyệt!
và non persistent cookie
Trang 53HttpCookie cookie = new HttpCookie("Account");
cookie["Username"] = "Nguyen Mai Chi";
cookie["email"] = “chiaki2412@yahoo.com";
// khai báo thời gian hết hạn cho cookie
cookie.Expires = DateTime.Now.AddDays(5);
// add cookie vào response của trang web
Response.Cookies.Add(cookie);
HttpCookie cookie = new HttpCookie("Account");
cookie["Username"] = "Nguyen Mai Chi";
cookie["email"] = “chiaki2412@yahoo.com";
// khai báo thời gian hết hạn cho cookie
cookie.Expires = DateTime.Now.AddDays(5);
// add cookie vào response của trang web
Response.Cookies.Add(cookie);
Trang 54Cross-page Postback
• Cross page postback là dạng postback gởi tới
trang khác
• Các button control như Button, ImageButton và
LinkButton đều có thuộc tính PostBackUrl
• Để sử dụng Cross-page postback
• Thiết lập PostBackUrl cho web form cần chuyển
đến
• Khi user click vào button
• Page sẽ được gởi tới URL mới với tất cả các giá trị
của các control trong trang hiện thời.
Trang 55lblInfo.Text = "You came from " + PreviousPage.Header.Title;
} }
protected void Page_Load(object sender, EventArgs e)
{
if (PreviousPage != null) {
lblInfo.Text = "You came from " + PreviousPage.Header.Title;
} }
Trang 56Cross-page Postback
Để truy cập chi tiết hơn, các giá trị của control trên
form, thì cần phải gán tham chiếu PreviousPage
cho lớp page tương ứng
Ta có thể add thuộc tính vào trang nguồn và đọc
lblInfo.Text = "Welcome" + prevPage.NameEntry;
lblInfo.Text = "Welcome" + prevPage.NameEntry;
}
Thuộc tính của lớp SourcePage
Trang 57Cross-page Postback
• Minh họa cross-page Postback
• Tạo 2 trang
• SendInfo.aspx: chứa form nhập thông tin user
• TargetPage.aspx: lấy thông tin từ user từ
SendInfo.aspx và hiển thị lên trình duyệt.
Trang 58Cross-page Postback
Mô tả control của trang SendInfo.aspx
Id control Kiểu control Thuộc tính Diễn giải
txtUsername TextBox Nhập tên user
txtEmail TextBox Nhập địa chỉ email
txtCompany TextBox Nhập tên công ty
btnPostInfo Button PostBackUrl =
~/TargetPage.aspx
Button thực thi thao tác Cross Page Postback
Trang 60Cross-page Postback
• Mô tả trang TargetPage.aspx
• Lấy thông tin từ SendInfo.aspx và hiển thị ra
trình duyệt
Id control Kiểu control Thuộc tính Diễn giải lblUsername Label - Hiển thị tên user lblEmail Label - Hiển thị email lblCompany Label - Hiển thị công ty
Trang 61Cross-page Postback
Phần xử lý của TargetPage lấy thông tin từ SourcPage.aspx
protected void Page_Load(object sender, EventArgs e) {
// lấy thông tin từ previous page
if (PreviousPage != null) {
// biến đối tượng source tham chiếu đến previous page
SendInfo source = PreviousPage as SendInfo;
// lấy các control của previous page (SourcePage.aspx)
TextBox username = (TextBox) source.FindControl(" txtUsername ");
TextBox email = (TextBox) source.FindControl(" txtEmail ");
TextBox company = (TextBox)source.FindControl(" txtCompany ");
// gán thông tin cho các label
lblUsername.Text = username.Text;
lblEmail.Text = email.Text;
lblCompany.Text = company.Text;
}// end if
} // end method Page_Load
ID của control trong SendInfo.aspx
SendInfo là class page của SendInfo.aspx
Trang 62 Đối tượng Application được sử dụng để quản lý tất cả các thông tin của một ứng dụng web, bao gồm các file, trang web, sự kiện, module và code trong thư mục web ảo(virtual directory) và các thư mục con của nó.
Application chia sẻ thông, nghĩa là một Application sau khi khởi tạo thì mọi người sử dụng có thể truy cập đối tượng này.
Trang 64Sự kiện Application và Session
Application_Start: Người dùng đầu tiên viếng thăm
1 trang web trong ứng dụng web được gọi
Application_End: Khi ứng dụng web kết thúc (không
có người dùng nào mở trang web của ứng dụng)
Application_Error: Xảy ra khi có lỗi trong ứng dụng
Session_Start: Một người dùng mới, ghé thăm 1
trang web của ứng dụng
Session_End: Người dùng đó đóng trình duyệt hoặc
sau một khoảng thời gian timeout không request lên ứng dụng
Trang 65 Khởi tạo:
Đối tượng Application được tạo khi client yêu cầu bất
kỳ trang nào trong ứng dụng
Application.Lock();
Application[“ TenBien ”] = “Value” ;
Application.UnLock();
Trang 66 Lấy giá trị:
<biến> = Application[“tên biến”];
string s = (string) Application[“chuoi”] ; int count = (int) Application[“count”] ;
Trang 67Ví dụ dùng Application
Đọc số lượt truy cập, số người online
Trang 68THE END