最近看著人事系統的代碼,還真是頭疼。。為了盡快上手,看懂點東西,便快馬加鞭了。看到前臺用到了cookie,正好JS也學到了這個地方,這樣就介紹一下Cookie的應用。
## 一、Cookie是什么
Cookie 是存儲于訪問者的計算機中的變量。每當同一臺計算機通過瀏覽器請求某個頁面時,就會發送這個 cookie。你可以使用 JavaScript 來創建和取回 cookie 的值。Cookie是由服務器端生成,發送給User-Agent(一般是瀏覽器),瀏覽器會將Cookie的key/value保存到某個目錄下的文本文件內,下次請求同一網站時就發送該Cookie給服務器。
比如說,當你第一次訪問淘寶時,要輸入你的用戶名和密碼,這時用戶信息會存儲在你的瀏覽器的文本文件中,當你退出后內容就會存在硬盤中,下一次發生會話時,就讀入到RAM中。
## 二、Cookie干什么
隨著web越來越復雜,開發者急切的需要能夠本地化存儲的腳本功能。Cookie的意圖就是在本地的客戶端的磁盤上以很小的文件形式保存數據。
## 三、Cookie局限性
(1)每個特定的域名下最多產生10個cookie。
(2)cookie的最大大約是4096字節(4k),為了更好的兼容性,一般不能超過4095字節。
(3)cookie存儲在客戶端的文本文件,所以特別重要和敏感的數據是不建議保存在cookie中的。這里是考慮安全性的問題。
## 四、Cookie如何工作


(1)客戶端通過瀏覽器發送報文給服務器,請求連接。
(2)服務器端收到要求,根據客戶端的要求建立一個Set-Cookies Header。
(3)服務器端通過建立Response Header去返回給客戶端。
(4)客戶端收到報文,解析,獲取cookie,存在本機內存。
? Cookie有幾個重要的屬性,Cookie中有一個Expires(有效期)屬性,這個屬性決定了Cookie的保存時間,也可以重新設定來改變它,若不設置該屬性,那么Cookie只在瀏覽網頁期間有效,關閉瀏覽器后,這些Cookie會自動消失。還有path屬性,可以限制訪問Cookie的目錄,domain用來限制域名訪問,secure指定必須通過Https加密通信訪問。對服務器起作用的是name和value屬性。
## 五、創建,讀取,刪除Cookie
下面的例子中,分別寫了四個函數創建,讀取,刪除,檢測cookie的值。
~~~
<script lang="javasctript" type="text/javascript">
function getCookie(c_name) { //讀取cookie值
if (document.cookie.length > 0) {
c_start = document.cookie.indexOf(c_name + "=")
if (c_start != -1) {
c_start = c_start + c_name.length + 1
c_end = document.cookie.indexOf(";", c_start)
if (c_end == -1) c_end = document.cookie.length
return unescape(document.cookie.substring(c_start, c_end))
}
}
return ""
}
function setCookie(c_name, value, expiredays) {//設置cookie值
var exdate = new Date()
exdate.setDate(exdate.getDate() + expiredays)
document.cookie = c_name + "=" + escape(value) +
((expiredays == null) ? "" : ";expires=" + exdate.toGMTString())
}
function delCookie(name)//刪除cookie
{
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval = getCookie(name);
if (cval != null) document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
}
function checkCookie() { //檢測cookie值
username = getCookie('username')
if (username != null && username != "")
{ alert('Welcome again ' + username + '!') }
else
{
username = prompt('Please enter your name:', "")
if (username != null && username != "") {
setCookie('username', username, 365)
}
}
}
setCookie("zhouzhou", 2, 3);
checkCookie('zhouzhou');
delCookie('zhouzhou');
alert(getCookie('zhouzhou'));
</script>
~~~
## 六、小結
本文簡單的從幾個角度介紹了:定義,作用,缺點,使用,流程。這讓我聯想到,Cookie通過在客戶端記錄信息確定用戶身份,Session通過在服務器端記錄信息確定用戶身份。什么時候使用Cookie,什么時候使用Session,還是需要仔細研究的。