Respone-Requesy-Server-Cookie
Trong bất kỳ ứng dụng nào, dù là winform based hay webform based thì việc giao tiếp (tương tác) với người dùng và giữa các webform với nhau là điều bắt buộc. Ví dụ ta cần phải lấy thông tin đặt hàng do người dùng nhập vào và hiển thị trở lại người dùng một ...
Trong bất kỳ ứng dụng nào, dù là winform based hay webform based thì việc giao tiếp (tương tác) với người dùng và giữa các webform với nhau là điều bắt buộc. Ví dụ ta cần phải lấy thông tin đặt hàng do người dùng nhập vào và hiển thị trở lại người dùng một số thông tin hữu ích khác, như kết quả thanh toán…hay một trang chuyển tiếp kết quả cho một trang khác để xử lý v.v…
Ở các bài trước, để làm điều này chúng ta thực hiện dễ dàng thông qua các server controls như textbox, listbox, dropdownlist, label,… Tuy nhiên những điều khiển này chỉ có tác dụng trong một Page còn các trang khác thì hoàn toàn không thể đọc/ghi giá trị nằm trong các điều khiển này.
Để thực hiện việc giao tiếp (truyền dữ liệu) giữa các webform ASP.NET cung cấp một tập các điều khiển giúp ta làm việc đó một cách dễ dàng, đó là: Đối tượng Request và đối tượng Response.
Trong bài học này, chúng ta cũng tìm hiểu thêm một số đối tượng khác cũng rất hay dùng khi xây dựng ứng dụng là đối tượng Server, Application và Session.
Đối tượng Response dùng để làm gì ?
Đối tượng này được dùng để gửi nội dung (một xâu) bất kỳ về cho trình duyệt.
Các thành phần (thuộc tính và phương thức) chính
Phương thức: Response.write(<Biểu thức>) dùng để gửi giá trị biều thức truyền vào cho phía trình duyệt.
Phương thức: Flush dùng để đưa dữ liệu còn trong bộ đệm phía server về cho phía trình duyệt.
Phương thức Response.Redirect(“địa chỉ URL”): Chuyển tới một trang khác.
Ví dụ sử dụng
Tạo một trang Login hoàn toàn bằng phương thức Response.write như sau:

Trang code sẽ như sau:
Đối tượng Request dùng để làm gì ?
Request là một đối tượng của ASP.NET, nó cho phép đọc các thông tin do các trang khác gửi (Submit) đến.
Các thành phần (thuộc tính và phương thức) chính
Phương thức:
Request.QueryString.Get("Tên_Phần tử cần đọc"): Để đọc giá trị của một phần tử được gửi theo phương thức Get (Method = "Get")
Phương thức Request.Form.Get("Tên_Phần tử cần đọc"): Để đọc giá trị của một phần tử được gửi theo phương thức Post (Method = "Post").
Chúý: Có thể dùng Request.Form.GetValues và Request.Form.GetValues để đọc.
Ví dụ sử dụng
Xây dựng 2 trang web : trang Default.aspx, trong đó có 2 textbox chứa tên và mật khẩu. Khi người dùng click vào nút submit thì gửi tên và mật khẩu sang trang Webform1.aspx để hiển thị.
Trang nguồn (gửi): Default.aspx
Code của 2 trang sẽ như sau:
Kết quả nhận về.

Default.aspx

Webform1.aspx
Code xử lý của trang webform1.aspx.cs
Đối tượng Server dùng để làm gì ?
- Dùng để tạo các đối tượng COM
- Lấy thông tin về tên máy
- Ánh xạ đường dẫn ảo thành đường dẫn vật lý.
Các thành phần (thuộc tính và phương thức) chính
CreateObject(“COM Specification”) ∈ Ít dùng trong ứng dụng .NET
MachineName: String; Trả về tên của máy tính server đang chạy.
Mappath(“Virtual path”): Trả về đường dẫn vật lý của đường dẫn ảo tương ứng.
Ví dụ sử dụng
In ra tên của máy chủ hiện hành: Response.Write(Server.MachineName);
Cho biết đường dẫn thực sự trên ổ cứng (thư mục vật lý) của trang hiện hành (trang default.aspx) : Server.Mappath(“default.aspx”);
Cho biết đường dẫn vật lý ứng với tệp QLCB.Mdb, biết rằng tệp này nằm trong một thư mục con là “App_Data”: Server.Mappath(“App_Data/QLDB.MDB”);
Đối tượng Application dùng để làm gì ?
Dùng để quản lý các biến có phạm vi toàn ứng dụng. Có tác dụng đến mọi người dùng.
Khái niệm biến toàn ứng dụng
Biến toàn ứng dụng là biến có tác dụng đối với mọi người dùng truy cập vào website. Mọi trang aspx.cs đều có thể truy cập đến biến này và dù ở bất kỳ thời điểm nào.
Đối tượng Application
Dùng để quản lý (Tạo, đọc, ghi) các biến có phạm vi toàn ứng dụng.
Cú pháp tạo biến Application:
Application.Add(“Tên_Biến”, <Giá trị khởi tạo>);
Ví dụ: Tạo biến So_Nguoi_Truy_Cap
Application.Add(“So_Nguoi_Truy_Cap”, 0)
Truy xuất đến biến Application:
Application.Contents[“Tên_Biến”] hoặc chỉ số: Application.Contents[i]
Ví dụ : Đọc và ghi biến Application.
Application.Contents[“SoNguoiTC”] = Application.Contents[“ SoNguoiTC ”] + 1
Response.write(“Bạn là vị khách thứ: “ & Application.Contents[“SoNguoiTC”])
Ngoài ra, đối tượng Application còn có 2 phương thức thường dùng là Application.Lock(): Để khóa không cho người khác sửa đổi các biến toàn cục và Application.UnLock() để mở khóa .
Đối tượng Application cũng có 2 sự kiện đó là Application_OnStart và Application_OnEND. Sự kiện OnStart chỉ được kích hoạt duy nhất một lần khi yêu cầu đầu tiên phát sinh. Sự kiện OnEND được kích hoạt khi dịch vụ web dừng (unload).
Đối tượng Application có 2 phương thức là Lock và Unlock. Khi gọi phương thức Lock (khóa) thì tất cả các ứng dụng không được phép thay đổi các giá trị Application. Để các ứng dụng khác được phép thay đổi các biến Application thì gọi phương thức Unlock.
Mã lệnh viết cho 2 sự kiện này cũng được đặt trong file Global.asa.
Cookie làm việc như thế nào?
Khi trình duyệt web tạo một Cookie, một nội dung sẽ được lưu vào header của trang web với nội dung giống như sau:
Set-Cookie: Message=Hello
Phần tiêu đề Set-Cookie này gây ra cho trình duyệt web tạo một Cookie có tên là Message và giá trị của nó là Hello.
Sau khi một Cookie được tạo trên trình duyệt, Mỗi khi trình duyệt yêu cầu một trang web trong ứng dụng, trình duyệt sẽ gửi một header có dạng giống như sau:
Cookie: Message=Hello
Tiêu đề Cookie chứa đựng tất cả các Cookie mà được tạo trên Web Server. Cookie được gửi trở lại mỗi khi một yêu cầu được đưa ra trên trình duyệt web.
Bạn có thể tạo hai kiểu của Cookie, Session Cookies và Persistent Cookies. Session cookies chỉ tồn tại trong bộ nhớ khi trình duyệt web bị đóng lại thì nó cũng bị xóa đi.
Còn Persistent Cookies có thể tồn tại hàng tháng hoặc hàng năm. Khi bạn tạo một Persistent Cookies, nó sẽ được lưu trữ trên web browse trên máy tính của bạn. với IE ví dụ nó sẽ được lưu trữ trong một file Text theo thư mục
Documents and Settings[user]Cookies
Còn với FireFox nó lưu trữ trong thư mục theo đường dẫn sau:
Documents and Settings [user] Application Data Mozilla Firefox Profiles [randomfolder name] Cookies.txt
bởi vì sự lưu trữ cookies trên các trình duyệt khác nhau để ở các thư mục khác nhau lên khi bạn tạo Cookies trên IE thì nó sẽ không tồn tại trên FireFox và ngược lại.
Tạo Cookies
Bạn có thể tạo cookies với câu lệnh Response.Cookies, tất cả các Cookies sẽ được gửi từ Web Server đến Web Browser.
Ví dụ sau đây sẽ tạo ra một Cookies Message với giá trị được lấy từ hộp TextBox trên Form
Ví dụ 1: Trang setCookies.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<script runat="server">
protected void Add_Click(object sender, EventArgs e)
{
Response.Cookies["Message"].Value = txtCookies.Text;
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Create Cookies</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Cookie Value"></asp:Label>
<asp:TextBox ID="txtCookies" runat="server"></asp:TextBox>
<asp:Button ID="Add" runat="server" OnClick"Add_Click" Text="Button" />
</div>
</form>
</body>
</html>
Trong ví dụ một là chúng ta tạo ra một Session Cookies, còn nếu bạn muốn tạo một Persistent Cookies bạn cần chỉ định thời hạn kết thúc cho Cookies .
Ví dụ 2 trang setPersistentCookies.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="setPersistentCookies.aspx.cs" Inherits="setPersistentCookies" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
int counter=0;
if (Request.Cookies["counter"] != null)
counter = Int32.Parse(Request.Cookies["counter"].Value);
counter++;
Response.Cookies["counter"].Value = counter.ToString();
Response.Cookies["counter"].Expires = DateTime.Now.AddYears(2);
this.Label1.Text = Response.Cookies["counter"].Value;
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Set Persitent Cookies</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</div>
</form>
</body>
</html>
Trong ví dụ trên khi chạy chương trình mỗi lần bạn Refresh lại trang thì giá trị của Label1 sẽ tăng lên một. Và với câu lệnh
Response.Cookies[“counter”].Expires=Datetime.Now.AddYears(2), có nghĩa là thời gian tồn tại của Cookie này sẽ là 2 năm.
Đọc dữ liệu từ Cookies
Bạn sử dụng lện Request.Cookies để lấy dữ liệu từ Cookies, bạn xem lại ví dụ 2 trang setPersistentCookies.aspx.
Khi bạn có một tập hợp các Cookies bạn có thể lấy tât cả giá trị của các Cookies trên website của mình, ví dụ sau đây sẽ hướng dẫn bạn làm việc đó.
Ví dụ 3 trang GetallCookies
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GetAllCookies.aspx.cs" Inherits="GetAllCookies" %>
<script runat="server">
void Page_Load()
{
ArrayList colCookies = new ArrayList();
for (int i = 0; i < Request.Cookies.Count; i++)
colCookies.Add(Request.Cookies[i]);
grdCookies.DataSource = colCookies;
grdCookies.DataBind();
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Get All Cookies</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="grdCookies" runat="server">
</asp:GridView>
</div>
</form>
</body>
</html>
Thiết lập thuộc tính cho Cookies
Cookies được đưa ra với lớp HttpCookie, khi bạn tạo hoặc lấy giá trị từ một Cookie có thể bạn sẽ sử dụng một vài thuộc tính của lớp này:
Domain: cho phép bạn chỉ định Domain kết hợp với Cookie. Giá trị mặc định là Domain hiện tại.
Expires: Cho phép tạo Persistent Cookies với thời hạn được chỉ định
HasKeys: Cho phép bạn định rõ Cookies có nhiều giá trị hay không.
HttpOnly: Cho phép đưa ra một Cookies từ JavaScript.
Name: chỉ định tên cho Cookies.
Path: Cho phép chỉ định đường dẫn kết hợp với Cookies. Giá trị mặc định là /.
Secure: Cho phép một Cookie được chuyển tác ngang tới kết nối Sercure Sockets
Layer (SSL).
Value: Cho phép lấy hoặc thiết lập giá trị cho Cooki
Values: Cho phép bạn lấy hoặc thiết lập giá trị riêng khi làm việc với Cookies có nhiều giá trị.
Xóa Cookies
Để xóa một Cookie bạn thiết lập ngày hết hạn cho Cookies là -1
Ví dụ như câu lệnh dưới đây:
Response.Cookies[“Message”].Expires = DateTime.Now.AddDays(-1);
Trên ví dụ trên chúng ta sẽ xóa Cookie vơi tên là Message.
Làm việc với Cookies nhiều giá trị:
Trong trình duyệt không lên lưu trưc hơn 20 Cookies từ một Domain, thay vào đó bạn có thể làm việc với một Cookie nhiều giá trị.
Một Cookies nhiều giá trị là một Cookies đơn chứa đựng nhiều khóa con, bạn có thể tạo nhiều khóa con như bạn muốn.
Như ví dụ dưới đây bạn tạo ra một Cookies Person nhiều giá trị, Cookie Person lưu trữ các giá trị Họ tên, Ngày sinh và màu sắc yêu thích.
Ví dụ 4 trang SetCookieValues.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SetCookieValues.aspx.cs" Inherits="SetCookieValues" %>
<script runat="server">
protected void btnsubmit_Click(object sender, EventArgs e)
{
Response.Cookies["Person"]["Hoten"] = txtHoten.Text;
Response.Cookies["Person"]["Ngaysinh"] = txtNgaysinh.Text;
Response.Cookies["Person"]["Color"] = txtColor.Text;
Response.Cookies["Person"].Expires = DateTime.MaxValue;
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Set Cookie MutilValues</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table>
<tr>
<td>Họ tên</td>
<td><asp:TextBox ID="txtHoten" runat="server" /></td>
</tr>
<tr>
<td>Ngày sinh</td>
<td><asp:TextBox ID="txtNgaysinh" runat="server" /></td>
</tr>
<tr>
<td>Màu yêu thích</td>
<td><asp:TextBox ID="txtColor" runat="server" /></td>
</tr>
<tr>
<td colspan="2">
<asp:Button ID="btnsubmit" runat="server" Text="Submit" OnClick="btnsubmit_Click" />
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
Việc lấy giá trị của Cookie nhiều giá trị tương tự như các phần trên, học viên về nhà hoàn thiện nốt.