JSP - Xử lý cookie
Trong chương này, chúng ta sẽ thảo luận về Xử lý Cookie trong JSP. Cookie là các tệp văn bản được lưu trữ trên máy khách và chúng được lưu giữ cho các mục đích theo dõi thông tin khác nhau. JSP hỗ trợ rõ ràng các cookie HTTP bằng cách sử dụng công nghệ servlet cơ bản.
Có ba bước liên quan đến việc xác định và người dùng cũ -
Tập lệnh máy chủ gửi một tập hợp các cookie đến trình duyệt. Ví dụ: tên, tuổi hoặc số nhận dạng, v.v.
Trình duyệt lưu trữ thông tin này trên máy cục bộ để sử dụng trong tương lai.
Khi lần tiếp theo trình duyệt gửi bất kỳ yêu cầu nào đến máy chủ web thì nó sẽ gửi thông tin cookie đó đến máy chủ và máy chủ sử dụng thông tin đó để xác định người dùng hoặc có thể cho một số mục đích khác.
Chương này sẽ hướng dẫn bạn cách thiết lập hoặc đặt lại cookie, cách truy cập chúng và cách xóa chúng bằng các chương trình JSP.
Giải phẫu của một cookie
Cookie thường được đặt trong tiêu đề HTTP (mặc dù JavaScript cũng có thể đặt cookie trực tiếp trên trình duyệt). JSP đặt cookie có thể gửi tiêu đề trông giống như thế này -
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 đựng a name value pair, a GMT date, a path và a domain. Tên và giá trị sẽ được mã hóa URL. Cácexpires trường là một chỉ dẫn cho trình duyệt để "forget" cookie sau thời gian và ngày nhất định.
Nếu trình duyệt được định cấu hình để lưu trữ cookie, thì trình duyệt sẽ giữ thông tin này cho đến ngày hết hạn. Nếu người dùng trỏ trình duyệt đến bất kỳ trang nào phù hợp với đường dẫn và miền của cookie, nó sẽ gửi lại cookie đến máy chủ. Tiêu đề của trình duyệt có thể trông giống như thế này -
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-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name = xyz
Một tập lệnh JSP sau đó sẽ có quyền truy cập vào cookie thông qua phương thức yêu cầu request.getCookies()trả về một mảng các đối tượng Cookie .
Phương thức cookie Servlet
Bảng sau liệt kê các phương thức hữu ích được liên kết với đối tượng Cookie mà bạn có thể sử dụng khi thao tác với cookie trong JSP:
Không. | Phương pháp & Mô tả |
---|---|
1 | public void setDomain(String pattern) Phương pháp này đặt miền áp dụng cookie; ví dụ: tutorialspoint.com. |
2 | public String getDomain() Phương pháp này lấy tên miền mà cookie áp dụng; ví dụ: tutorialspoint.com. |
3 | public void setMaxAge(int expiry) Phương pháp này đặt thời gian (tính bằng giây) sẽ trôi qua trước khi cookie hết hạn. Nếu bạn không đặt điều này, cookie sẽ chỉ tồn tại trong phiên hiện tại. |
4 | public int getMaxAge() Phương thức này trả về tuổi tối đa của cookie, được chỉ định bằng giây, Theo mặc định, -1 cho biết cookie sẽ tồn tại cho đến khi trình duyệt tắt. |
5 | public String getName() Phương thức này trả về tên của cookie. Không thể thay đổi tên sau khi tạo. |
6 | public void setValue(String newValue) Phương pháp này đặt giá trị được liên kết với cookie. |
7 | public String getValue() Phương thức này nhận giá trị được liên kết với cookie. |
số 8 | public void setPath(String uri) Phương pháp này đặt đường dẫn mà cookie này áp dụng. Nếu bạn không chỉ định một đường dẫn, cookie sẽ được trả về cho tất cả các URL trong cùng một thư mục với trang hiện tại cũng như tất cả các thư mục con. |
9 | public String getPath() Phương thức này lấy đường dẫn mà cookie này áp dụng. |
10 | public void setSecure(boolean flag) Phương thức này đặt giá trị boolean cho biết liệu cookie chỉ nên được gửi qua các kết nối được mã hóa (tức là SSL). |
11 | public void setComment(String purpose) Phương thức này chỉ định một nhận xét mô tả mục đích của cookie. Nhận xét hữu ích nếu trình duyệt hiển thị cookie cho người dùng. |
12 | public String getComment() Phương thức này trả về bình luận mô tả mục đích của cookie này hoặc vô hiệu nếu cookie không có bình luận. |
Cài đặt Cookie với JSP
Đặt cookie với JSP bao gồm ba bước:
Bước 1: Tạo đối tượng Cookie
Bạn gọi hàm tạo Cookie bằng tên cookie và giá trị cookie, cả hai đều là chuỗi.
Cookie cookie = new Cookie("key","value");
Xin lưu ý rằng tên và giá trị không được chứa khoảng trắng hoặc bất kỳ ký tự nào sau đây -
[ ] ( ) = , " / ? @ : ;
Bước 2: Đặt độ tuổi tối đa
Bạn dùng setMaxAgeđể chỉ định thời gian (tính bằng giây) cookie sẽ hợp lệ. Đoạn mã sau sẽ thiết lập một cookie trong 24 giờ.
cookie.setMaxAge(60*60*24);
Bước 3: Gửi Cookie vào các tiêu đề phản hồi HTTP
Bạn dùng response.addCookie để thêm cookie trong tiêu đề phản hồi HTTP như sau
response.addCookie(cookie);
Thí dụ
Hãy để chúng tôi sửa đổi Ví dụ về Biểu mẫu của chúng tôi để đặt cookie cho họ và tên.
<%
// 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 );
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>
Hãy để chúng tôi đưa đoạn mã trên vào main.jsp và sử dụng nó trong trang HTML 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ữ nội dung HTML ở trên trong một tệp hello.jsp và đặt hello.jsp và main.jsp trong <Tomcat-installation-directory>/webapps/ROOTdanh mục. Khi nào bạn sẽ truy cậphttp://localhost:8080/hello.jsp, đây là kết quả thực tế của biểu mẫu trên.
Cố gắng nhập Tên và Họ rồi nhấp vào nút gửi. Thao tác này sẽ hiển thị tên và họ trên màn hình của bạn và cũng sẽ đặt hai cookiefirstName và lastName. Các cookie này sẽ được chuyển trở lại máy chủ khi bạn nhấp vào nút Gửi vào lần tiếp theo.
Trong phần tiếp theo, chúng tôi sẽ giải thích cách bạn có thể truy cập lại các cookie này trong ứng dụng web của mình.
Đọc Cookies với JSP
Để đọc cookie, bạn cần tạo một mảng các đối tượng javax.servlet.http.Cookie bằng cách gọigetCookies( )phương thức của HttpServletRequest . Sau đó xoay vòng qua mảng và sử dụnggetName() và getValue() các phương pháp để truy cập từng cookie và giá trị liên quan.
Thí dụ
Bây giờ chúng ta hãy đọc cookie đã được đặt 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 the 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>");
}
%>
</body>
</html>
Bây giờ chúng ta hãy đặt đoạn mã trên vào main.jspvà cố gắng truy cập nó. Nếu bạn đặtfirst_name cookie là "John" và last_name cookie là "Người chơi" rồi 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 bằng JSP
Để xóa cookie rất đơn giản. Nếu bạn muốn xóa cookie, bạn chỉ cần làm theo ba bước sau:
Đọc một cookie đã có và lưu trữ nó trong đối tượng Cookie.
Đặt tuổi cookie bằng 0 bằng cách sử dụng setMaxAge() phương pháp xóa một cookie hiện có.
Thêm lại cookie này vào tiêu đề phản hồi.
Thí dụ
Ví dụ sau sẽ chỉ cho bạn cách xóa một cookie hiện có có tên "first_name" và khi bạn chạy main.jsp JSP lần sau, 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 the 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];
if((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>
Bây giờ chúng ta hãy đặt đoạn mã trên vào main.jspvà cố gắng truy cập nó. Nó sẽ hiển thị 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ờ chạy http: // localhost: 8080 / main.jsp một lần nữa 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 cookie của mình trong Internet Explorer theo cách thủ công. Bắt đầu từ menu Công cụ và chọn Tùy chọn Internet. Để xóa tất cả cookie, hãy nhấp vào nút Xóa cookie.