JavaWeb之Cookie

JavaWeb之Cookie:會話跟蹤的一種機制

  Cookie 機制採用的是客戶端保持HTTP狀態信息的方案。

  Cookie 是在瀏覽器訪問WEB服務器的某個資源是,有WEB服務器再HTTP響應消息頭中附帶傳送給瀏覽器的一個小文本文件,一旦WEB瀏覽器保存的某個Cookie,那麼它在以後每次訪問該WEB服務器時,都會在HTTP請求頭中將這個Cookie回傳個WEB服務器。
  如果創建了一個Cookie,並將他發送到瀏覽器,默認情況下它是一個會話級別的Cookie,存儲在瀏覽器的內存中,用戶默認退出瀏覽器後被刪除,若希望瀏覽器將該cookie存儲在磁盤上,則需要使用maxAge,並給出一個以秒爲單位的時間。

  ----setMaxAge 設置Cookie的最大時效,以秒爲單位,若爲0,表示立即刪除該Cookie,若爲負數表示不存儲該Cookie。

  ----setPath 設置Cookie的作用範圍。可以作用當前目錄和當前目錄的子目錄,但不能作用於當前目錄的上一級目錄。

  ----response.addCookie(cookie);調用response的一個方法把Cookie 傳給客戶端。

使用Cookie 實現顯示最近瀏覽的商品:

books.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

<a href="book.jsp?book=1">1</a><br>
<a href="book.jsp?book=2">2</a><br>
<a href="book.jsp?book=3">3</a><br>
<a href="book.jsp?book=4">4</a><br>
<a href="book.jsp?book=5">5</a><br>
<a href="book.jsp?book=6">6</a><br>
<a href="book.jsp?book=7">7</a><br>
<a href="book.jsp?book=AAA">AAA</a><br>

<br><br>

<%
//獲取所有的Cookie,選擇符合條件的
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
			for (Cookie c : cookies) {
				String cookieName = c.getName();
				if (cookieName.startsWith("BOOK_")) {
					out.print(c.getValue());
					out.print("<br>");
				}
			}
		}
%>

</body>
</html>
book.jsp

<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h4>Book Detail Page</h4>
	Book:<%=request.getParameter("book")%>

	<br>
	<br>

	<a href="books.jsp">Return</a>
	<%
		String book = request.getParameter("book");
		//1.確定要被刪除的Cookie
		//前提:BOOK開頭的Cookie數量大於或等於5
		Cookie[] cookies = request.getCookies();
		List<Cookie> bookCookies = new ArrayList<Cookie>();
		//用來保存和books.jsp傳入的book匹配的那個Cookie
		Cookie tempCookie = null;
		if (cookies != null && cookies.length > 0) {
			for (Cookie c : cookies) {
				String cookieName = c.getName();
				if (cookieName.startsWith("BOOK_")) {
					bookCookies.add(c);
					
					if(c.getValue().equals(book)){
						tempCookie = c;
					}
				}
			}
		}
		//若從books.jsp頁面傳入的book不在Book_的Cookie中則刪除第一個Cookie
		if(bookCookies.size() > 5 && tempCookie == null){
			tempCookie = bookCookies.get(0);
		}
		//若在其中,則刪除該Cookie,放置新的進去
		if(tempCookie != null){
			tempCookie.setMaxAge(0);
			response.addCookie(tempCookie);
		}

		//2.把從books.jsp傳入的book作爲一個Cookie返回
		Cookie c = new Cookie("BOOK_" + book, book);
		response.addCookie(c);
	%>

</body>
</html>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章