Đối tượng Server được sử dụng để cung cấp thông tin của Server cho ứng dụng. +Thuộc tính MachineName
Thuộc tính này được dùng để lấy tên của Web Server.
+ Phương thức MapPath
Phương thức Mappath được dùng để lấy đường dẫn vật lý hoặc đường dẫn ảo đến một thư mục trên Server.
+ Phương thức Transfer(<Đường dẫn đến trang cần yêu cầu>)
Ngừng thi hành trang hiện hành, gởi yêu cầu mới đến trang được gọi thực hiện.
Ví dụ :Tạo trang LietKeCacBienServer , lấy danh sách các biến server public partial class LietKeCacBienServer : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e)
{ int i, j;
NameValueCollection coll = Request.ServerVariables; String[] arr1 = coll.AllKeys;
for (i = 0; i < arr1.Length; i++) {
Response.Write("Key: " + arr1[i] + "<br>"); String[] arr2 = coll.GetValues(arr1[i]); for (j = 0; j < arr2.Length; j++)
{
Response.Write("Value " + j + ": " + Server.HtmlEncode(arr2[j]) + "<br>"); } } }
Ví dụ: Minh họa upload tập tin về Sever
Nội dung trang GuiTapTin.aspx, cho phép gửi một tập tin từ Client đến Server.
public partial class GuiTapTin : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e) {
}
protected void btnGui_Click(object sender, EventArgs e) {
//Kiểm tra có tập tin nào được chọn ?
if (fuDuLieu.HasFile) {
//thiết lập đường dẫn cho tập tin
string filename = "~/DuLieu/" + fuDuLieu.FileName; //Lấy đường dẫn vật lý cho tập tin trên ứng dụng string s = Server.MapPath(filename);
154
//Lưu tập tin về thư mục DuLieu của ứng dụng fuDuLieu.SaveAs(s);
Response.Write("Tập tin
:"+fuDuLieu.FileName+" đã gửi thành công ."); } }}
Kết quả thực thi :
Bước 5 :
Kiểm tra kết quả . Nhấp vào biểu tượngShow All Filestrên cửa sổ Solution , sau đó nhấp biểu tượngRefresh thấy kết quả như hình bên hoặc các
bạn có thể kiểm tra bằng cách mở thư mục DuLieu trên đĩa để xem kết quả .
4. ViewState
Các điều khiển Web Server Controls lưu trữ hầu hết các giá trị của chúng vào view state, khi thuộc tính EnableViewState được thiết lập với giá trị true (mặc định). Thuộc tính ViewState của trang cung cấp thơng tin view state hiện hành. Thuộc tính này là một thể hiện của lớp StateBag. StateBag là một từ điển, có mỗi mục được lưu trong một khe "riêng" bằng cách sử dụng một tên chuỗi duy nhất.
Ví dụ, hãy xem xét mã này: this.ViewState["Counter"] = 1;
Lệnh này đặt giá trị 1 (hay đúng hơn, một số nguyên có chứa giá trị 1) vào trong ViewState. Nếu hiện tại khơng có mục có tên “Counter”, một mục mới sẽ được thêm tự động. Nếu một mục đã được lưu trữ dưới cái tên “Counter”, nó sẽ được thay thế.
Ví dụ:
Tạo một trangSimpleCounter.aspxcó một Button và Label.
|[TblCount]|
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="SimpleCounter.aspx.cs" Inherits="SimpleCounter" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
155
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server"> <title>Untitled Page</title> </head>
<body>
<form id="form1" runat="server"> <div>
<asp:Button ID="cmdIncrement" runat="server" OnClick="cmdIncrement_Click" Text="Increment" /><br /> <br />
<asp:Label ID="lblCount" runat="server"></asp:Label> </div> </form>
</body> </html>
Phần mã lệnh trangSimpleCounter.aspx.cs:
public partial class SimpleCounter : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) { } protected void cmdIncrement_Click(object sender, EventArgs e) { int counter; if (ViewState["Counter"] == null) { counter = 1; } else { counter = (int)ViewState["Counter"] + 1; } ViewState["Counter"] = counter;
lblCount.Text = "Counter: " + counter.ToString();}
Khi thực thi chương trình, đầu tiên chỉ xuất hiện button như sau:
ViewState["Counter"] = counter;
IblCount.Text = "Counter: " + counter.ToString();____________________________
156
Khi click tiếp hai lần trên button, giá trị của biến counter được tăng lên là 3, như vậy giá trị counter được duy trì qua các lần request nhờ vào ViewSate[“Counter”]
Khi click vào button increment, giá trị counter được khởi tạo bằng 1 và gán cho ViewState với tên “Counter” , và hiện giá trị trên trang qua điều khiển nhãn lblCount
Khi xem mã nguồn của trang SimpleCounter qua trình duyệt, nội dung trang có chứa khai báo _VIEWSTATE với giá trị lưu dạng mã Base64 (kiểu mã hoá đặc biệt của chuỗi đó và ln ln được chấp nhận trong một tài liệu HTML bởi vì nó khơng bao gồm bất kỳ ký tự mở rộng
nào) như sau:
<input type="hidden" name=" _ VIEWSTATE" id=" VIEWSTATE"
value="/wEPDwUKLTMyNDcxODYzNQ8WAh4HQ291bnRlcgIDFgICAw9kFgICAw8 PFgIeBFRleHQFC
kNvdW50ZXI6IDNkZGQYEc7So4CVsUXZm8qMxX0K6H/BQA==" />
Hình 5.3. Mã nguồn trang SimpleCounter.aspx có biến _VIEWSTAE.
5. Session
Đối tượng Session được dùng để lưu trữ thông tin của người dùng trong ứng dụng. Thông tin được lưu trữ trong Session là của một người dùng trong một phiên
157
làm việc cụ thể. Web Server sẽ tự động tạo một đối tượng Session cho mỗi người dùng mới kết nối vào ứng dụng và tự động hủy chúng nếu người dùng cịn khơng làm việc với ứng dụng nữa.
Tuy nhiên, không giống như đối tượng Application, đối tượng Session không thể chia sẻ thông tin giữa những lần làm việc của người dùng, nó chỉ có thể cung cấp, trao đổi thông tin cho các trang trong lần làm việc tương ứng.
Trong ứng dụng web, đối tượng Session giữ vai trò khá quan trọng. Do sử dụng giao thức HTTP, một giao thức phi trạng thái, Web Server hồn tồn khơng ghi nhớ những gì giữa những lần yêu cầu của Client. Đối tượng Session tỏ ra khá hữu hiệu trong việc thực hiện "lưu vết và quản lý thông tin của người dùng".
Thuộc tính & Phương thức + Thuộc tính Timeout
Qui định khoảng thời gian (tính bằng phút) mà Web Server duy trì đối tượng Session nếu người dùng khơng gởi yêu cầu nào về lại Server. Giá trị mặc định của thuộc tính này là 20. Nếu khơng có u cầu nào kể từ lần yêu cầu sau cùng một khoảng thời gian là <Timeout> phút, đối tượng Session mà Web server cấp cho lần làm việc đó sẽ tự động được giải phóng. Những yêu cầu sau đó được Web server coi như là một người dùng mới, và đương nhiên sẽ được cấp một đối tượng Session mới.
+ Phương thức Abandon
Như các bạn đã biết, trong khoảng thời gian <Timeout> phút kể từ lần yêu cầu sau cùng của Client, đối tượng Session vẫn được duy trì dù cho khơng có sự tương tác nào của Client. Điều này đồng nghĩa với việc Web server phải sử dụng một vùng nhớ để duy trì đối tượng Session trong một khoảng thời gian tương ứng.
Phương thức Abandon của đối tượng Session sẽ giải phóng vùng nhớ được dùng để duy trì đối tượng Session trên Web Server ngay khi được gọi thực hiện. Những yêu cầu sau đó được Web server coi như là một người dùng mới.
Sử dụng biến toàn cục với Session Tạo biến Session
_Session["Tên biến"]= <giá trị>
Lấy giá trị từ biến Session
<biến> = Session["Tên biến"]
Ví dụ:Minh họa sử dụng biến session lưu thông tin của người dùng khi đăng nhập Tạo ứng dụng Web gồm các trang ASP.Net được mơ tả như sau :
TrangDangNhap.aspx
Control Tên thuộc tính Giá trị thuộc tính
Lable Text Tên đăng nhập
Lable Text Mật khẩu
TextBox ID txtTenDangNhap
TextBox ID txtMatKhau
Button Text Đăng nhập
ID btnĐangNhap
158
Thiết kế giao diện trang DangNhap.aspx
Xử lý sự kiện
public partial class DangNhap : System.Web.UI.Pag
{
protected void Page_Load(object sender, EventArgs e) { } protected void btnDangNhap_Click(object sender, EventArgs e) {
if (txtTenDangNhap.Text == "An" && txtMatKhau.Text == "123") { Session["TenDangNhap"] = txtTenDangNhap.Text;
Response.Redirect("ChaoMung.aspx"); } }}
TrangChaoMung.aspx :
public partial class ChaoMung : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e) {
//Lấy giá trị từ biến Session string s = Session["TenDangNhap"].ToString();
Response.Write("Chúc mừng bạn " + s + " đã đăng nhập thành công."); }}
Kết quả thi hành các trang ASP.Net
159
6. Cookie
Có lẽ bạn cũng đã từng đăng ký là một thành viên của một trang web hay một forum nào đó, và chắc cũng khơng ít lần ngạc nhiên khi bạn vừa yêu cầu đến một trang web hay forum mà bạn đã đăng ký trước đó, trang web nhận ngay ra, bạn chính là thành viên của họ và gởi ngay lời chào đến bạn, chẳng hạn: Chào Nguyễn Văn An. Những thông tin của bạn khi đăng nhập hay khi đăng ký được lưu ngay chính tại máy của bạn. Những thông tin này được Web Server lưu tại máy Client được gọi là
Cookies.
Không giống như đối tượng Session, đối tượng Cookies cũng được dùng để lưu trữ thông tin của người dùng, tuy nhiên, thông tin này được lưu ngay tại máy gởi yêu cầu đến Web Server.
Có thể xem một Cookie như một tập tin (với kích thước khá nhỏ) được Web Server lưu tại máy của người dùng. Mỗi lần có yêu cầu đến Web Server, những thông tin của Cookies cũng sẽ được gởi theo về Server.
Hình 5.4. Minh hoạ Cookies.
+ Làm việc với Cookies + Thêm Cookies
Response.Cookies.Add(<HttpCookie>) Ví dụ:
HttpCookie ck = new HttpCookie("TenDangNhap"); ck.Value = txtTenDangNhap.Text; ck.Expires = DateTime.Now.AddDays(15); Response.Cookies.Add(ck);
Trong thí dụ trên, chúng ta đã tạo ra Cookies có tên là TenDangNhap lưu trữ tên đăng nhập của người dùng. Thông tin này sẽ được lưu trữ trên Cookies 15 ngày kể từ ngày hiện hành trên Web Server.
+ Lấy giá trị từ Cookies
160
Trong trường hợp Cookies chưa được lưu hoặc đã hết thời hạn duy trì tại Client, giá trị nhận được là null.
Thí dụ: Tạo trang
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="CookieExample.aspx.cs" Inherits="CookieExample" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title>
</head> <body>
<form id="form1" runat="server"> <div>
<div style="border-right: 2px solid; padding-right: 30px; border-top: 2px solid; padding- left: 30px; font-weight: bold; font-size: 140%; padding-bottom: 30px; border-left: 2px solid; padding-top: 30px; border-bottom: 2px solid; font-family: Verdana; background- color: #FFFFD9">
<asp:Label ID="lblWelcome" runat="server" EnableViewState="False" ></asp:Label> </div> <br />
Name:
<asp:TextBox ID="txtName" runat="server" Width="178px"></asp:TextBox>
<asp:Button ID="cmdStore" runat="server" OnClick="cmdStore_Click" Text="Create Cookie" />
</div>
</form> </body> </html>
Khi click nút [Create Cookie], phần mã lệnh thực thi như sau: public partial class CookieExample : System.Web.UI.Page { protected void Page Load(object sender, EventArgse
{
HttpCookiecookie = Request.Cookies["Preferences"];if(cookie ==null)
{
lblWelcome.Text ="<b>Unknown Customer</b>";
}
else
{
lblWelcome.Text ="<b>Cookie Found.</b><br><br>"; IblWelcome.Text += "Welcome, "+ cookie["Name"];
}
}
protected voidcmdStore_Click(objectsender,EventArgse)
{
// Check for a cookie, and only create a new one if // one doesn't already exist.
HttpCookiecookie = Request.Cookies["Preferences"];if(cookie ==null)
{
161
}
cookie["Name"] = txtName.Text; cookie.Expires = DateTime.Now.AddYears(l); Response.Cookies.Add(cookie);
lblWelcome.Text ="<b>Cookie Created.</b><br><br>"; IblWelcome.Text += "New Customer: "+ cookie["Name"];
Khi thực thi trang CookieExample.aspx :
Click nút [Create Cookie], trình chủ (web server) sẽ tạo một Cookie tên Name có giá trị là Dao Nguyen ghi lại trên máy khách với thời hạn lưu trú là một năm.
cookie["Name"] = txtName.Text;
cookie.Expires = DateTime.Now.AddYears(l); Response.Cookies.Add(cookie);
162
Gọi thực thi lại trang CookieExample.aspx lần thứ hai trở đi, kết quả hiển thị trang: