轉自:http://blog.csdn.net/magic_miao/article/details/51871726
cookie的工作流程:
客戶端訪問服務器,服務器調用response.addCookie()方法,產生響應時,會產生set-cookie響應頭,將cookie文本發送給客戶端,客戶端會將cookie文本保存起來,當客戶端再次請求服務器時,會產生cookie請求頭,將之前服務器發送的cookie信息,再發送給服務器,服務器就可以根據cookie信息跟蹤客戶端的狀態。
----------
cookie的分類:
1 存放在客戶端瀏覽器的緩存中,當瀏覽器不關閉,cookie信息一起存在,瀏覽器一關閉,cookie消失
2 存放在客戶端的文件中,並可以設置cookie過期時間,過期時間之內,即使瀏覽器關閉,也可以將cookie信息發送給服務器,超過過期時間,cookie消失。
cookie信息是以文本方式存放在客戶端的,所以容易引起一些安全隱患,所以不要把隱秘信息以cookie方式保存。
驗證
我們來驗證一下。
現在打開 http://localhost:3000
我們看到 Request Headers 並沒有 Cookie 這個字段
但是 Response Headers 有了 Set-Cookie 這個字段
現在我們刷新一下頁面,相當於重新向 http://localhost:3000/ 這個地址發起了一次請求。
現在我們就可以看到 Cookie 字段已經帶上了,再刷新幾次看 Cookie 也還是在的。
document.cookie
JS 提供了獲取 Cookie 的方法:document.cookie,我們先去設置多幾個 Cookie。
我們可以看到,Cookie 就是一段字符串。但這個字符串是有格式的,由鍵值對 key=value 構成,鍵值對之間由一個分號和一個空格隔開。
什么是 Cookie
說了這么多,大家應該知道 Cookie 是什么吧。整理一下有以下幾個點:
Cookie 就是瀏覽器儲存在用戶電腦上的一小段文本文件
Cookie 是純文本格式,不包含任何可執行的代碼
Cookie 由鍵值對構成,由分號和空格隔開
Cookie 雖然是存儲在瀏覽器,但是通常由服務器端進行設置
Cookie 的大小限制在 4kb 左右
----------
session的工作流程:
客戶端訪問服務器,服務器調用request.getSession()方法,產生session對象,用於跟蹤用戶的
狀態,同時,給session對象分配一個唯一標識sessionId。為了管理session對象,以sessionId為鍵,以session對象為值,封裝成Map集合。產生響應時,將sessionId以cookie方式發送給客戶端,存放在客戶端瀏覽器的緩存中。當客戶端再次請求服務器,會將sessionId以cookie請求頭的方式發送給服務器,服務器得到sessionId后,從Map集合中,得到session對象,從而跟蹤狀態。