cookie是什麼?
- 是由服務器端生成,發送給User-Agent(一般指瀏覽器),瀏覽器將cookie以鍵值對的形式保存到某個目錄下的文本文件內。下次請求該網站時就把cookie發送回服務器。(cookie就是一個小文件,瀏覽器對其大小一般限制在4k,用來記錄一些信息(一般用作標識))
爲什麼有cookie?
web應用程序是使用Http協議傳輸數據的,而Http協議是無狀態的,一旦數據交換完成就會斷開連接,再次交換就要重新建立連接,此時,服務器並不知道該瀏覽器與自己進行過數據交互(大白話就是 服務器不認識這個瀏覽器了,即使這個瀏覽器跟服務器說過話)意味着服務器無法從連接上跟蹤會話。
那麼,如何讓服務器記住這個瀏覽器???(如何跟蹤記錄用戶???),有一下幾種技術
- 使用一些承載用戶身份的Http請求首部(在請求頭):
①、有一個字段form(現在不常用:不安全),裏面存放的是E-mail,服務器根據此來識別;
②、使用user-agent字段,該字段記錄瀏覽器的一些信息,可識別瀏覽器,對識別用戶沒有太大的幫助。
③、referer,該字段可用來進行網站統計(即從什麼鏈接進入的該網站),也是隻能粗略反映出一些信息; - 根據客戶端IP地址(缺點:http請求中沒有一個字段能得到ip地址;而且有些網站會動態分配一個ip,不穩定;ip對應的是機器設備,而不是用戶)
- 登陸賬號密碼
- 胖URL(即在已有的url後進行動態擴展拼接)並且能記住用戶信息的週期僅爲本次(就是說關閉窗口重新打開該頁面還是不認識)
- cookie
瀏覽器在發送請求後,服務器除了正常的響應之外,會在響應頭裏加入一個set-cookie:id=XXX
,瀏覽器接收之後會存入本地文檔(txt),下次向該服務器發送請求時,會附帶此cookie.
cookie是具有保質期的
- 會話cookie(臨時cookie) 關閉窗口就刪除
- 永久cookie:設置有效期
cookie特點
1.需要遵循瀏覽器的同源策略。(即 兩個網站即使根域名相同,端口或者子域名不同,那這兩個網站就分別有自己的cookie,而且不能操作彼此的cookie)
2. 內存大小有限制。(每個瀏覽器對其個數的限制不相同,每個域名在20~50之間,大小一般都限制在4K)
3. 在本地可以被更改**(所以不能放置敏感數據)**
cookie使用
cookie主要是web服務器端設置的,但前端要會使用操作cookie
- 增:直接
document.cookie = "age = 18";
注:不設置時間會是默認爲臨時cookie,而且同一路徑下&&同一域名只能有一個名字的cookie,遵循同源策略。,一條語句語句只能設置一條cookie - 刪:將時間設爲過期,瀏覽器就會自動刪除
- 改:同增;
- 查:由於cookie是字符串,所以要進行處理.如下:
var manageCookie = {
setCookie:function(name,value,time){
document.cookie = name + '=' + value + ';max-age'+time;
return this;
},
removeCookie: function(name){
this.setCookie(name,'',-1);
return this;
},
getCookie: function(name,callback){ //不考慮同名不同路徑的cookie,即默認即使不同路徑也不會出現同名的cookie
//此處利用數組處理
var allCookieArr = document.cookie.split('; ');
for(var i =0;i<allCookieArr.length;i++){
var itemArr = allCookieArr[i].split('=');
if(itemArr[0] == name){
callback({itemArr[0]:itemArr[1]});
return this; //參數有一個function是因爲return被鏈式調用佔用,而得到值不只是顯示,所以設置一個回調函數處理此值
}
}
callback({undefined:undefined});
return this;
}
}