00 01JSP學習之Cookie處理

1 Cookie入門

1、HTTP協議與Cookie
Cookie是HTTP協議制定的,先由服務器保存Cookie到瀏覽器,再下次瀏覽器請求服務器時把上一次請求得到Cookie再歸還給服務器。

Cookie是由服務器創建保存到客戶端瀏覽器的一個鍵值對,服務器保存Cookie的響應頭:Set-Cookie:aaa=AAA Set-Cookie:bbb=BBB
|——response.addHeader("Set-Cookie","aaa=AAA");

當瀏覽器請求服務器時,會把該服務器保存的Cookie隨請求發送給服務器。瀏覽器歸還Cookie的請求頭:Cookie:aaa=AAA;bbb=BBB

HTTP協議規定(保證不給瀏覽器太大壓力)
(1)1個Cookie最大4KB;
(2)一個服務器最多向1個瀏覽器保存20個Cookie;
(3)一個瀏覽器最多可以保存300個Cookie。
以上規定並不是強制性規定,不同瀏覽器對Cookie要求不一樣。這就是會話跟蹤技術。

2、Cookie的用途
(1)服務器使用Cookie來跟蹤客戶端狀態;
(2)保存購物車(購物車中的商品不能使用request保存,因爲它是一個用戶向服務器發送的多個請求消息)
(3)顯示上次登錄名(也是一個用戶多個請求)
但是要注意的是Cookie是不能跨瀏覽器的。

3、JavaWeb中使用Cookie
(1)原始方式:
|——使用response發送Set-Cookie響應頭;
|——使用request獲取Cookie請求頭;
(2)便捷方式:
|——使用response.addCookie()方法像瀏覽器保存Cookie;
|——使用request.getCookies()方法獲取瀏覽器歸還的Cookie。

4、Cookie例子
(1)a.jsp:一個JSP保存Cookie;

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Save Cookie</h1>
<%-- request\response\session\application\pageContext\config\out\page\exception --%>
<%
	Cookie cookie1 = new Cookie("aaa", "AAA");
	response.addCookie(cookie1);
	Cookie cookie2 = new Cookie("bbb", "BBB");
	response.addCookie(cookie2);
%>
</body>
</html>

(2)b.jsp:獲取瀏覽器歸還的cookie。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Get Cookies</h1>
<%
Cookie[] cookies = request.getCookies();
if(cookies != null){
	for(Cookie cookie:cookies){
		out.print(cookie.getName() + "=" + cookie.getValue() + "<br/>");
	}
}
%>
</body>
</html>

2 Cookie的生存時長

Cookie不只有name和value兩個屬性。

Cookie的maxAge:Cookie的最大生命,即Cookie可保存的最大時長。以秒爲單位,例如,cookie.setMaxAge(60)表示這個Cookie會被瀏覽器保存到硬盤
(1)maxAge>0:瀏覽器會把Cookie保存到客戶機硬盤上,有效時長由maxAge的值決定;
(2)maxAge<0:Cookie只在瀏覽器內存中存在,當用戶關閉瀏覽器時,瀏覽器進程結束,同時Cookie也就死亡了。
(3)maxAge=0:瀏覽器會馬上刪除這個Cookie。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Save Cookie</h1>
<%-- request\response\session\application\pageContext\config\out\page\exception --%>
<%
	Cookie cookie1 = new Cookie("aaa", "AAA");
	cookie1.setMaxAge(60*60);
	response.addCookie(cookie1);
	
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Get Cookies</h1>
<%
Cookie[] cookies = request.getCookies();
if(cookies != null){
	for(Cookie cookie:cookies){
			cookie.setMaxAge(0);
	}
}
%>
</body>
</html>

3 Cookie的路徑

Cookie的path並不是設置這個Cookie在客戶端的保存路徑。

Cookie的path由服務器創建Cookie時設置。

當瀏覽器訪問服務器某個路徑時,需要歸還哪些Cookie給服務器呢?這由Cookie的path來決定。

瀏覽器訪問服務器的路徑,如果包含某個Cookie的路徑,那麼就會歸還這個Cookie。

Cookie的path默認值:當前訪問路徑的父路徑。例如再訪問/lks/hhy/a.jsp時,響應的Cookie,那麼這個Cookie的默認path爲/lks/hhy

4 Cookie的域

domain用來指定Cookie的域名,當多個二級域中共享Cookie時纔有用。例如:www.baidu.com、zhidao.baidu.com、news.baidu.com、tieba.baidu.com之間共享Cookie時可以使用domain。

設置domain爲:cookie.setDomain("baidu.com")
設置path爲:cookie.setPath("/")

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