Tải bản đầy đủ (.pdf) (8 trang)

xu ly cookie trong servlet

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (312.68 KB, 8 trang )


 servlets/index.jsp
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Copyright
 ©
 vietjack.com
 



 

Xử lý Cookie trong Servlet
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à, Java Servlet hỗ trợ các HTTP cookie.
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.

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 Servlet, 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:
GET / 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-


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Trang
 chia
 sẻ
 các
 bài
 học
 online
 miễn
 phí
 Page
 1



 



 servlets/index.jsp
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Copyright

 ©
 vietjack.com
 


 
Encoding: gzip Accept-Language: en Accept-Charset: iso-8859-1,*,utf-8 Cookie:
name=xyz

Sau đó, một Servlet sẽ có sự truy cập tới 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 Servlet Cookie
Bảng dưới liệt kê các phương thức hữu ích để bạn sử dụng trong khi thao tác các Cookie
trong Servlet:
STT

1

Phương thức và Miêu tả

public void setDomain(String pattern)
Phương thức thiết lập domain mà Cookie áp dụng, ví dụ: vietjack.com

2

public String getDomain()
Phương thức nhận domain mà Cookie áp dụng, ví dụ: vietjack.com

3


public void setMaxAge(int expiry)
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

4

public int getMaxAge()
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

5

public String getName()
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

6

public void setValue(String newValue)


 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Trang
 chia
 sẻ
 các
 bài
 học
 online

 miễn
 phí
 Page
 1


 



 servlets/index.jsp
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 Copyright
 ©
 vietjack.com
 


 
Phương thức này thiết lập giá trị mà liên kết với Cookie đó
7

public String getValue()
Phương thức này nhận giá trị mà liên kết với Cookie đó

8

public void setPath(String uri)
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 như trong tất cả thư mục phụ

9

public String getPath()
Phương thức này nhận path mà Cookie này áp dụng


10

public void setSecure(boolean flag)
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)

11

public void setComment(String purpose)
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

12

public String getComment()
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 Servlet
Bạn theo 3 bước sau để thiết lập Cookie với Servlet:


 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Trang
 chia
 sẻ
 các
 bài
 học

 online
 miễn
 phí
 Page
 1


 



 servlets/index.jsp
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 Copyright
 ©
 vietjack.com
 


 
(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ụngresponse.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 Ví dụ về Form để thiết lập các Cookie cho First và Last name:
// Import required java libraries import java.io.*; import javax.servlet.*;
import javax.servlet.http.*;
// Extend HttpServlet class public class
HelloForm extends HttpServlet {
public void doGet(HttpServletRequest
request,


HttpServletResponse response)

throws

ServletException, IOException
{
// Create cookies for first and last
names.
Cookie firstName = new Cookie("first_name",
request.getParameter("first_name"));
Cookie lastName = new
Cookie("last_name",
request.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 );
content type

response.addCookie( lastName );
response.setContentType("text/html");

out = response.getWriter();

// Set response
PrintWriter


String title = "Setting Cookies Example";

String docType =
""transitional//en\">\n";
out.println(docType +
"<html>\n"

+

"<head><title>" + title + "</title></head>\n" +
"<body bgcolor=\"#f0f0f0\">\n" +
"

" +


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Trang
 chia
 sẻ
 các
 bài
 học
 online
 miễn
 phí
 Page
 1



 



 servlets/index.jsp
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Copyright

 ©
 vietjack.com
 


 
title + "

\n" +

"<ul>\n" +
" <li><b>First
+ request.getParameter("first_name") + "\n" +
" <li><b>Last Name</b>: "
+ request.getParameter("last_name")
+ "\n" +
"</ul>\n" +
"</body></html>");
} }
Name</b>: "

Biên dịch HelloForm trên và tạo entry thích hợp trong web.xml file và cuối cùng thử trang
HTML sau để gọi Servlet:
<html> <body> <form action="HelloForm" method="GET"> First Name: type="text" name="first_name">
Last Name: name="last_name" /> <input type="submit" value="Submit" /> </form> </body>
</html>

Giữ nội dung HTML trên trong Hello.htm file và đặt nó trong thư mục <Tomcat-installationdirectory>/webapps/ROOT directory. Khi bạn truy cập http://localhost:8080/Hello.htm, thì
đây là output của form trên:
First 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 Servlet
Để đọ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ụ
Chúng ta cùng đọc Cookie sau mà đã thiết lập trong ví dụ trước đó:
// Import required java libraries import java.io.*; import javax.servlet.*;
import javax.servlet.http.*;
// Extend HttpServlet class public class
ReadCookies extends HttpServlet {
public void doGet(HttpServletRequest


 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Trang
 chia
 sẻ
 các
 bài

 học
 online
 miễn
 phí
 Page
 1


 



 servlets/index.jsp
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 Copyright
 ©
 vietjack.com
 


 
request,

HttpServletResponse response)

ServletException, IOException

{

throws

Cookie cookie = null;

Cookie[]

cookies = null;
// Get an array of Cookies associated with this domain

cookies = request.getCookies();
// Set response content type
response.setContentType("text/html");
PrintWriter out =
response.getWriter();
String title = "Reading Cookies Example";
String docType =
""transitional//en\">\n";
out.println(docType +
"<html>\n"

+

"<head><title>" + title + "</title></head>\n" +

"<body bgcolor=\"#f0f0f0\">\n" );
if( cookies != null ){
out.println("

Found Cookies Name and Value

");

for (int i = 0;

i < cookies.length; i++){
cookie = cookies[i];
out.print("Name : " + cookie.getName( ) + ", ");
out.print("Value: " + cookie.getValue( )+"
");
out.println(
"

No cookies founds

");
out.println("</body>");


out.println("</html>");

}
}

}else{

} }

Biên dịch ReadCookie trên và tạo entry thích hợp trong web.xml file. Nếu bạn đã thiết lập
first_name

cookie



“John”



last_name

cookie



“Player”,

thì


khi

chạyhttp://localhost:8080/ReadCookies 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 Servlet
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 Servlet là
ReadCookies trong lần kế tiếp thì nó sẽ trả về giá trị null cho first_name.



 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 Trang
 chia
 sẻ
 các
 bài
 học
 online
 miễn
 phí
 Page
 1


 



 servlets/index.jsp
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Copyright
 ©
 vietjack.com
 


 
// Import required java libraries import java.io.*; import javax.servlet.*;
import javax.servlet.http.*;
// Extend HttpServlet class public class
DeleteCookies extends HttpServlet {
public void doGet(HttpServletRequest
request,

HttpServletResponse response)


throws

ServletException, IOException
{
Cookie cookie = null;
Cookie[]
cookies = null;
// Get an array of Cookies associated with this domain
cookies = request.getCookies();
response.setContentType("text/html");
response.getWriter();
String docType =

// Set response content type
PrintWriter out =

String title = "Delete Cookies Example";
"
"transitional//en\">\n";
out.println(docType +
+
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor=\"#f0f0f0\">\n" );

"<html>\n"

if( cookies != null ){


out.println("

Cookies Name and Value

");
cookies.length; i++){
cookie = cookies[i];

for (int i = 0; i <

if((cookie.getName( )).compareTo("first_name") == 0 ){
cookie.setMaxAge(0);
response.addCookie(cookie);
out.print("Deleted cookie : " +
) + "
");
}

) + ",
}

");

}else{
founds");

cookie.getName(
out.print("Name : " + cookie.getName(

out.print("Value: " + cookie.getValue( )+"
");

}
out.println("</html>");

out.println(

"

No cookies
out.println("</body>");

} }

Biên dịch DeleteCookies trên và tạo entry thích hợp trong web.xml file. Bây giờ bạn
chạyhttp://localhost:8080/DeleteCookies sẽ hiển thị kết quả:

Cookies Name and Value

Deleted cookie : first_name

Name : first_name, Value: John

Name : last_name,

Value: Player


 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Trang
 chia
 sẻ
 các
 bài
 học
 online
 miễn
 phí

 Page
 1


 



 servlets/index.jsp
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 Copyright
 ©
 vietjack.com
 


 
Bây giờ chạy http://localhost:8080/ReadCookies và nó sẽ chỉ hiển thị 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.


 


 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Trang
 chia
 sẻ
 các

 bài
 học
 online
 miễn
 phí
 Page
 1


 



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×