Trong lần tới, trình duyệt gửi bất kỳ yêu cầu nào tới Web server, thì nó gửi những thông tin Cookie này tới Server và Server này sử dụng thông tin đó để nhận diện người dùng.. Chương này
Trang 1Cookie trong JSP
Cookie là các text file được lưu giữ trên máy tính Client và chúng được giữ cho mục đích theo dõi các thông tin đa dạng Rõ ràng một điều là, JSP hỗ trợ các HTTP cookie bởi sử dụng công nghệ Servlet
ở tầng dưới
Có 3 bước liên quan trong việc nhận diện việc phản hồi người dùng: Server script gửi một tập hợp các Cookie tới trình duyệt Ví dụ:
name, age, hoặc số chứng minh thư, …
Trình duyệt lưu giữ thông tin này trên thiết bị nội bộ để sử dụng trong thời gian tới
Trong lần tới, trình duyệt gửi bất kỳ yêu cầu nào tới Web server, thì
nó gửi những thông tin Cookie này tới Server và Server này sử dụng thông tin đó để nhận diện người dùng
Chương này hướng dẫn bạn cách để thiết lập và phục hồi các
Cookie, cách để truy cập chúng và cách để xóa chúng bởi sử dụng các chương trình JSP
Phân tích một Cookie
Cookie thường được thiết lập trong một HTTP Header (mặc dù
JavaScript cũng có thể thiết lập một Cookie trực tiếp trên một trình duyệt) Một JSP, mà thiết lập một Cookie, có thể gửi các Header trông giống như sau:
HTTP / 1.1 200 OK
Date : Fri , 04 Feb 2000 21 : 03 : 38 GMT
Server : Apache / 1.3 9 ( UNIX ) PHP / 4.0b3
Set - Cookie : name = xyz ; expires = Friday , 04 - Feb - 07 22 : 03 : 38 GMT ;
path =/; domain = tutorialspoint com
Connection : close
Content - Type : text / html
Như bạn có thể thấy, Set-Cookie Header chứa cặp name-value, một GMT date, một path và một domain Name và value sẽ là URL được
mã hóa Trường Expires là một chỉ lệnh tới trình duyệt để “bỏ qua” Cookie sau một khoảng date và time đã cho
Nếu trình duyệt được định cấu hình để lưu giữ các Cookie, thì nó sẽ giữ thông tin này tới Expiry Date Nếu người dùng chỉ tới trình duyệt tại bất cứ trang nào mà kết nối với path và domain của Cookie đó, nó
sẽ gửi lại Cookie đó tới Server Các Header của trình duyệt có thể trông giống như sau:
Trang 2GET / HTTP / 1.0
Connection : Keep - Alive
User - Agent : Mozilla / 4.6 ( X11 ; I ; Linux 2.2 6 - 15apmac ppc )
Host : zink demon co uk : 1126
Accept : image / gif , * /*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz
Sau đó, một JSP script sẽ có sự truy cập tới các Cookie đó thông
qua phương thức request.getCookies(), mà trả về một mảng các
đối tượng Cookie.
Các phương thức liên kết với Cookie
trong JSP
Bảng dưới liệt kê các phương thức hữu ích liên kết với đối tượng
Cookie, mà bạn có thể sử dụng trong khi thao tác các cookie trong
JSP:
STT Phương thức và Miêu tả
Phương thức thiết lập domain mà Cookie áp dụng, ví dụ: vietjack.com
Phương thức nhận domain mà Cookie áp dụng, ví dụ: vietjack.com
Phương thức này thiết lập thời gian bao lâu (bằng giây) thì Cookie hết hạn Nếu bạn không thiết lập nó, Cookie sẽ chỉ tồn tại cho session hiện tại
Phương thức này trả về tuổi tối đa của Cookie này, được xác định bằng giây Theo mặc định, -1 chỉ rằng Cookie sẽ tồn tại tới khi trình duyệt kết thúc
Phương thức này trả về tên của Cookie Tên này không thể bị thay đổi sau khi tạo ra
Phương thức này thiết lập giá trị mà liên kết với Cookie đó
Phương thức này nhận giá trị mà liên kết với Cookie đó
Phương thức này thiết lập path mà Cookie này áp dụng Nếu bạn không xác định một path, thì Cookie được trả về cho mọi URL trong cùng thư mục trong trang hiện tại cũng
Trang 3như trong tất cả thư mục phụ
Phương thức này nhận path mà Cookie này áp dụng
Phương thức này thiết lập giá trị Boolean chỉ rằng có hay không Cookie chỉ nên được gửi qua các kết nối được mật mã hóa (ví dụ: SSL)
Phương thức này xác định một comment mà miêu tả một mục đích của Cookie
Comment này là hữu ích nếu trình duyệt hiển thị Cookie tới người dùng
Phương thức này trả về Comment miêu tả mục đích của Cookie này, hoặc trả về null nếu Cookie này không có comment
Thiết lập Cookie với JSP
Để thiết lập các cookie với JSP, bạn theo 3 bước sau:
(1) Tạo một đối tượng Cookie: Bạn gọi Cookie constructor với một
tên Cookie và một giá trị Cookie, cả hai đều là các String:
Cookie cookie = new Cookie ( "key" , "value" );
Bạn nên nhớ rằng, cả tên và giá trị không nên chứa khoảng trống
trắng hoặc bất kỳ ký tự nào sau:
(2) Thiết lập tuổi tối đa: Bạn sử dụng setMaxAge để xác định thời
gian bao lâu (bằng giây) thì Cookie sẽ còn hiệu lực Ví dụ sau sẽ
thiết lập một Cookie trong 24 giờ
cookie setMaxAge ( 60 * 60 * 24 );
(3) Gửi Cookie vào trong các trường HTTP Response Header:
Bạn sử dụng response.addCookie để thêm các Cookie vào trong
các trường HTTP Response Header như sau:
response addCookie ( cookie );
Ví dụ
Chúng ta sửa đổi một chút Ví dụ Form trong JSP trong chương
trước để thiết lập cookie cho First Name và Last Name:
<%
// Create cookies for first and last names
Cookie firstName = new Cookie ( "first_name" ,
request getParameter ( "first_name" ));
Cookie lastName = new Cookie ( "last_name" ,
Trang 4request getParameter ( "last_name" ));
// Set expiry date after 24 Hrs for both the cookies.
firstName setMaxAge ( 60 * 60 * 24 );
lastName setMaxAge ( 60 * 60 * 24 );
// Add both the cookies in the response header.
response addCookie ( firstName );
response addCookie ( lastName );
%>
<html>
<head>
<title> Setting Cookies </title>
</head>
<body>
<center>
<h1> Setting Cookies </h1>
</center>
<ul>
<li><p><b> First Name: </b>
<%= request getParameter ( "first_name" ) %>
</p></li>
<li><p><b> Last Name: </b>
<%= request getParameter ( "last_name" ) %>
</p></li>
</ul>
</body>
</html>
Đặt code trên trong main.jsp file và sử dụng HTML page sau:
<html>
<body>
<form action = "main.jsp" method = "GET">
First Name: <input type = "text" name = "first_name">
<br />
Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>
</body>
</html>
Giữ HTML content trong một file là hello.jsp và đặt hello.jsp và main.jsp trong thư mục
<Tomcat-installation-directory>/webapps/ROOT Khi bạn truy cập
http://localhost:8080/hello.jsp, thì output thực sự của form trên là:
Trang 5First Name:
Last Name:
Khi bạn nhập First Name và Last Name và sau đó nhấn nút Submit
Nó sẽ hiển thị First Name và Last Name trên màn hình và cùng tại thời điểm đó, nó sẽ thiết lập hai Cookie là firstName và lastName, mà
sẽ được truyền trở lại Server khi lần kế tiếp bạn nhấn nút Submit này
Phần tới sẽ giới thiệu cho bạn cách để truy cập các Cookie này trở lại trong ứng dụng web của bạn
Đọc Cookie với JSP
Để đọc các Cookie, bạn cần tạo một mảng các đối tượng
javax.servlet.http.Cookie bằng việc gọi phương thức getCookies()
của HttpServletRequest Sau đó, tuần hoàn qua mảng, và sử dụng
các phương thức getName() và getValue() để truy cập mỗi Cookie và giá trị liên kết
Ví dụ
Đọc các cookie mà chúng ta có trong ví dụ trước:
<html>
<head>
<title> Reading Cookies </title>
</head>
<body>
<center>
<h1> Reading Cookies </h1>
</center>
<%
Cookie cookie = null ;
Cookie [] cookies = null ;
// Get an array of Cookies associated with this domain
cookies = request getCookies ();
if ( cookies != null ){
out println ( "<h2> Found Cookies Name and
Value</h2>" );
for ( int i = 0 ; i < cookies length ; i ++){
cookie = cookies [ i ];
out print ( "Name : " + cookie getName ( ) + ", " );
out print ( "Value: " + cookie getValue ( )+ "
<br/>" );
}
} else {
out println ( "<h2>No cookies founds</h2>" );
Trang 6}
%>
</body>
</html>
Đặt code trên trong main.jsp file và thử truy cập nó Nếu bạn đã thiết lập first_nam cookie là “John” và last_name cookie là “Player”, thì khi
chạy http://localhost:8080/main.jsp sẽ hiển thị kết quả sau:
Found Cookies Name and Value
Name : first_name, Value: John
Name : last_name, Value: Player
Xóa Cookie với JSP
Xóa một Cookie là rất đơn giản Nếu bạn muốn xóa một Cookie, đơn giản bạn chỉ cần theo 3 bước sau:
• Đọc một cookie đang tồn tại và lưu nó trong đối tượng Cookie
• Thiết lập tuổi của cookie về 0 bởi sử dụng phương thức
setMaxAge() để xóa một cookie đang tồn tại.
• Thêm cookie này trở lại bên trong trường Response header
Ví dụ
Ví dụ sau sẽ xóa cookie đang tồn tại với tên là “first_name” và khi bạn chạy JSP là main.jsp trong lần kế tiếp thì nó sẽ trả về giá trị null cho first_name
<html>
<head>
<title> Reading Cookies </title>
</head>
<body>
<center>
<h1> Reading Cookies </h1>
</center>
<%
Cookie cookie = null ;
Cookie [] cookies = null ;
// Get an array of Cookies associated with this domain
cookies = request getCookies ();
if ( cookies != null ){
out println ( "<h2> Found Cookies Name and
Value</h2>" );
for ( int i = 0 ; i < cookies length ; i ++){
cookie = cookies [ i ];
Trang 7if (( cookie getName ( )) compareTo ( "first_name" ) ==
0 ){
cookie setMaxAge ( 0 );
response addCookie ( cookie );
out print ( "Deleted cookie: " +
cookie getName ( ) + "<br/>" );
}
out print ( "Name : " + cookie getName ( ) + ", " );
out print ( "Value: " + cookie getValue ( )+ "
<br/>" );
}
} else {
out println (
"<h2>No cookies founds</h2>" );
}
%>
</body>
</html>
Đặt code trên trong main.jsp file và thử truy cập nó Nó sẽ cho kết quả sau:
Cookies Name and Value
Deleted cookie : first_name
Name : first_name, Value: John
Name : last_name, Value: Player
Bây giờ, thử chạy http://localhost:8080/main.jsp một lần nữa, và nó
sẽ hiển thị chỉ một cookie như sau:
Found Cookies Name and Value
Name : last_name, Value: Player
Bạn có thể xóa các cookie của bạn trong IE bởi thao tác bằng tay
Bắt đầu tại Tools menu và chọn Internet Options Để xóa tất cả
cookie, nhấn Delete Cookies