什么是會話
會話可簡單理解為:用戶開一個瀏覽器,點擊多個超鏈接,訪問多個web資源,然后關閉瀏覽器,整個過程稱之為一個會話。
Cookie
Cookie翻譯成中文是小甜點,小餅干的意思。在HTTP中它表示服務器送給客戶端瀏覽器的小甜點。其實Cookie就是一個鍵和一個值構成的,隨著服務器端的響應發送給客戶端瀏覽器。然后客戶端瀏覽器會把Cookie保存起來,當下一次再訪問服務器時把Cookie再發送給服務器。
Cookie規范
Cookie最多只有4KB,一個服務器最多只能發送到客戶端20個Cookie,并且瀏覽器最多可以保存300個Cookie。當然,在瀏覽器大戰的今天,一些瀏覽器為了打敗對手,可能對Cookie規范“擴展”了一些,例如每個Cookie的大小為8KB,最多可保存500個Cookie等!但也不會出現把你硬盤占滿的可能!
Cookie的屬性、
- name 名稱
- value 值
- path 有效路勁
- domain 有效域名
Cookie的使用
-
得到Cookie
- 從request中得到Cookie數組,得到想要的,從這里面遍歷取出Cookie
Cookie[] cookies = request.getCookies() - 構造函數創建
Cookie c = new Cookie(LAST_ITME,time);
- 從request中得到Cookie數組,得到想要的,從這里面遍歷取出Cookie
-
往瀏覽器寫Cookie
- 代碼
response.addCookie(c); - 效果:在瀏覽器響應頭可以看到
Set-Cookie:last_time="2016-46-22 12:46:00"; Version=1
- 代碼
注意:瀏覽器第二次請求的時候會把第一次請求返回的Cookie在請求行帶上,服務器就可以得到上一次響應的Cookie
部分API介紹
-
c.setMaxAge(int maxAge);設置Cookie有效期
maxAge = -1
也就是不設這個屬性的情況,Cookie默認保存在瀏覽器內存里,隨著瀏覽器的關閉而消亡maxAge = 0
返回的Cookie不會被第二次請求的請求頭帶上maxAge>0
表示Cookie持久化了,持久化的時間為maxAge值(秒),換句話說,當用戶關閉瀏覽器,只要在maxAge時間內重新打開瀏覽器,就會帶上該Cookie
setPath()
設置Cookie的有效路勁,如果第二次訪問的資源能匹配上Cookie的該屬性,則請求的時候回帶上
c.setPath("/ConversationDemo/LastTimeServlet");
也就是說,非此"/ConversationDemo/LastTimeServlet"不帶該Cookiec.setDomain("taobao.com");
設置Cookie的有效域名
Cookie保存中文
Cookie中是不可以設置中文的,但可以使用URLEncodor.encode()方法編碼后在存放到Cookie中。在獲取Cookie時,需要先使用URLDecoder.decode()方法解碼,再使用
向客戶端響應添加Cookie
String name = URLEncoder.encode("姓名", "UTF-8");
String value = URLEncoder.encode("張三", "UTF-8");
Cookie c = new Cookie(name, value);
c.setMaxAge(3600);
response.addCookie(c);從客戶端請求中獲取Cookie
String name = URLDecoder.decode(c.getName(), "UTF-8");
String value = URLDecoder.decode(c.getValue(), "UTF-8");
String s = name + ": " + value + "
";
response.getWriter().print(s);
Cookie的應用場景
- 記住密碼,xxx天免登陸
- 瀏覽記錄