cookie介紹及使用

cookie是什麼?

  1. 是由服務器端生成,發送給User-Agent(一般指瀏覽器),瀏覽器將cookie以鍵值對的形式保存到某個目錄下的文本文件內。下次請求該網站時就把cookie發送回服務器。(cookie就是一個小文件,瀏覽器對其大小一般限制在4k,用來記錄一些信息(一般用作標識))

爲什麼有cookie?

web應用程序是使用Http協議傳輸數據的,而Http協議是無狀態的,一旦數據交換完成就會斷開連接,再次交換就要重新建立連接,此時,服務器並不知道該瀏覽器與自己進行過數據交互(大白話就是 服務器不認識這個瀏覽器了,即使這個瀏覽器跟服務器說過話)意味着服務器無法從連接上跟蹤會話。
那麼,如何讓服務器記住這個瀏覽器???(如何跟蹤記錄用戶???),有一下幾種技術

  1. 使用一些承載用戶身份的Http請求首部(在請求頭):
    ①、有一個字段form(現在不常用:不安全),裏面存放的是E-mail,服務器根據此來識別;
    ②、使用user-agent字段,該字段記錄瀏覽器的一些信息,可識別瀏覽器,對識別用戶沒有太大的幫助。
    ③、referer,該字段可用來進行網站統計(即從什麼鏈接進入的該網站),也是隻能粗略反映出一些信息;
  2. 根據客戶端IP地址(缺點:http請求中沒有一個字段能得到ip地址;而且有些網站會動態分配一個ip,不穩定;ip對應的是機器設備,而不是用戶)
  3. 登陸賬號密碼
  4. 胖URL(即在已有的url後進行動態擴展拼接)並且能記住用戶信息的週期僅爲本次(就是說關閉窗口重新打開該頁面還是不認識)
  5. cookie
    瀏覽器在發送請求後,服務器除了正常的響應之外,會在響應頭裏加入一個set-cookie:id=XXX,瀏覽器接收之後會存入本地文檔(txt),下次向該服務器發送請求時,會附帶此cookie.

cookie是具有保質期的

  1. 會話cookie(臨時cookie) 關閉窗口就刪除
  2. 永久cookie:設置有效期

cookie特點

1.需要遵循瀏覽器的同源策略。(即 兩個網站即使根域名相同,端口或者子域名不同,那這兩個網站就分別有自己的cookie,而且不能操作彼此的cookie)
2. 內存大小有限制。(每個瀏覽器對其個數的限制不相同,每個域名在20~50之間,大小一般都限制在4K)
3. 在本地可以被更改**(所以不能放置敏感數據)**

cookie使用

cookie主要是web服務器端設置的,但前端要會使用操作cookie

  1. 增:直接document.cookie = "age = 18";
    注:不設置時間會是默認爲臨時cookie,而且同一路徑下&&同一域名只能有一個名字的cookie,遵循同源策略。,一條語句語句只能設置一條cookie
  2. 刪:將時間設爲過期,瀏覽器就會自動刪除
  3. 改:同增;
  4. 查:由於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;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章