Http協(xié)議與Cookie(了解)
- Cookie是Http協(xié)議制定的唯竹,先有服務(wù)器保存Cookie到瀏覽器,再下次瀏覽器請(qǐng)求服務(wù)器時(shí)把上一次請(qǐng)求得到的Cookie再歸還給服務(wù)器
- 由服務(wù)器創(chuàng)建保存到 客戶端瀏覽器的一個(gè)鍵值對(duì)坑傅,服務(wù)器保存Cookie的響應(yīng)頭:set-Cookie:aaa-AAA,set-Cookie:bbb-BBB
- Http協(xié)議規(guī)定(保證不會(huì)給瀏覽器太大的壓力)
一個(gè)Cookie最大4kb
一個(gè)服務(wù)器最多向一個(gè)瀏覽器保存20個(gè)Cookie
一個(gè)瀏覽器最多可以保存300個(gè)Cookie
- 瀏覽器大戰(zhàn):因?yàn)闉g覽器競(jìng)爭(zhēng)很激烈瞳浦,所以很多瀏覽器都會(huì)在一定范圍內(nèi)違反HTTP規(guī)定,但也不會(huì)讓一個(gè)Cookie為4GB
Cookie的用途
- 服務(wù)器使用Cookie來跟蹤客戶端狀態(tài)
- 保存購物車(購物車中的商品不能使用request保存铐懊,因?yàn)樗且粋€(gè)用戶向服務(wù)器發(fā)送的多個(gè)請(qǐng)求)
- 顯示上交登錄名
javaweb中使用Cookie
- 原始方法(了解)
使用reponse發(fā)送set-Cookie響應(yīng)頭
使用request獲取響應(yīng)頭
- 便捷方法(精通)
使用response.addCookie()方法向?yàn)g覽器保存Cookie
使用request.getCookie()方法獲取瀏覽器歸還的Cookie
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>保存Cookie</h1>
<%
Cookie cookie1 = new Cookie("aaa","AAA");
response.addCookie(cookie1);
Cookie cookie2 = new Cookie("bbb","BBB");
response.addCookie(cookie2);
%>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>保存Cookie</h1>
<%
Cookie[] cookies = request.getCookies();
if (cookies!=null){
for (Cookie c : cookies){
out.print(c.getName()+"="+c.getValue()+"<br/>");
}
}
%>
</body>
</html>
Cookie詳解
- Cookie不只有name和value倆個(gè)屬性
- Cookie的MaxAge(掌握):Cookie的最大生命灶搜,即Cookie可保存的最大時(shí)長(zhǎng)祟蚀,以秒為單位。例如:coojie.setMaxAge(60)表示這個(gè)Cookie會(huì)被瀏覽器保存到硬盤60s
maxAge>0:瀏覽器會(huì)把Cookie保存到客戶端硬盤上割卖,有效時(shí)長(zhǎng)為maxAge的值決定
maxAge<0:Cookie只在瀏覽器內(nèi)存中存在前酿,當(dāng)用戶關(guān)閉瀏覽器時(shí),瀏覽器進(jìn)程結(jié)束鹏溯,同時(shí)Cookie也就死亡了
maxAge=0:瀏覽器會(huì)馬上刪除這個(gè)Cookie
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>保存Cookie</h1>
<%
Cookie cookie1 = new Cookie("aaa","AAA");
cookie1.setMaxAge(60*60);
response.addCookie(cookie1);
%>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>保存Cookie</h1>
<%
Cookie cookie1 = new Cookie("aaa","AAA");
cookie1.setMaxAge(0);
response.addCookie(cookie1);
%>
</body>
</html>
Cookie的path(理解)
- Cookie的path并不是設(shè)置Cookie在客戶端的保存路徑
- Cookie的path由服務(wù)器創(chuàng)建Cookie時(shí)設(shè)置
- 當(dāng)瀏覽器訪問服務(wù)器某個(gè)路徑時(shí)薪者,需要?dú)w還哪些Cookie給服務(wù)器呢?這是由Cookie的path決定
- 瀏覽器訪問服務(wù)器的路徑剿涮,如果包含某個(gè)Cookie的路徑言津,那么就會(huì)歸還某個(gè)Cookie
- 例如:
acookie.path=/day11/;bcookie.path=/day11/jsps/;ccookie.path=/day11/jsps/cookie/;
訪問:/day11/index.jsp/時(shí),歸還:aCookie
訪問:/day11/jspa/index.jsp時(shí)取试,歸還:acookie悬槽,bcookie
訪問://day11/jsps/cookie/index.jsp時(shí),歸還acookie瞬浓,bcookie初婆,ccookie
- cookie的path默認(rèn)值:當(dāng)前訪問路徑的父路徑,猿棉,例如磅叛,在訪問/day11/jsps/a.jsp時(shí),響應(yīng)的cookie那么這個(gè)cookie默認(rèn)的路徑為/day11/jsps/
Cookie的domain(了解)
- domain用來指定Cookie的域名萨赁,當(dāng)多個(gè)二級(jí)域共享Cookie時(shí)才有用
- 例如:www.baidu.com,zhidao.baidu.com,new.baidu.com之間共享Cookie域時(shí)可以使用弊琴,
- 設(shè)置domain為:cookie.setDomain(".baidu.com")
- 設(shè)置path為:cookie.setpath("/");