1. 程式人生 > >javascript基礎五 (cookie基礎)

javascript基礎五 (cookie基礎)

/**
 * cookie : 儲存資料,當用戶訪問了某個網頁的時候,我們就可以通過cookie來像訪問者的電腦儲存資料
 * 1:不同的瀏覽器儲存的位置不同
 * 2:cookie的儲存時以域名形式進行區分
 * 3:cookie資料可以設定名字
 * 4:一個域名下存放的cookie有個數限制,不同的瀏覽器存放的個數不同
 * 5:每個cookie存放的內容大小也是有限制的,不同的瀏覽器存放的大小不一樣
 *
 * 注意:
 * 1.我們通過document.cookie來獲取當前網站下的cookie的時候,得到是一個字串的值,包含了網站下所有的cookie,他會把所有的cookie通過一個分號加空格的形式串聯起來
 * 2.如果我們想長時間存放cookie
 * document.cookie = '名稱=值;expires+ 字串格式的時間'
 * 3.cookie預設是臨時儲存,當瀏覽器關閉程序的時候自動銷燬
 * 
 */
//設定過期時間
var oDate = new Date();
oDate.setDate(oDate.getDate()+5);  //設定五天後過期(物件型別)
oDate.toGMTString();//將過期時間設定為字串型別
document.cookie = 'username = owl;expires=' + oDate.toGMTString();
// 在cookie儲存一些特殊字元的時候可能會出現問題解決方法:內容最好編碼後存放
encodeURI('');
decodeURI('');//讀取解碼
document.cookie = 'username ='+ encodeURI('owl\n你好haha') + ' owl;expires=' + oDate.toString();
alert(decodeURI(document.cookie));
//cookie方法
function setCookie(key,value,t){
	var oDate = new Date() + t;
	oDate.setDate(oDate.getDate() + t);
	document.cookie = key + '=' + value + ';expires=' + oDate.toGMTString();
}
function getCookie(key){
	var arr1 = document.cookie.split("; ");
	for(var i=0; i<arr1.length;i++){
		var arr2 = arr1[i].split('=');
		if(arr2[0] == key){
			return decodeURI(arr2[1]);
		}
	}
}
function removeCookie(key){
	setCookie(key,'',-1);
}

轉載延伸:

各瀏覽器之間對cookie的不同限制:

IE6.0 IE7.0/8.0 Opera FF Safari Chrome
cookie個數   每個域為20個    每個域為50個   每個域為30個   每個域為50個    沒有個數限制    每個域為53個
cookie大小 4095個位元組 4095個位元組 4096個位元組 4097個位元組 4097個位元組 4097個位元組

總之,在進行頁面cookie操作的時候,應該儘量保證cookie個數小於20個,總大小 小於4KB

如果 cookie 的值比較小(即字元長度小)的話,則重新整理頁面或發起新的請求就不會有問題。

______________________________________________ 一個分隔線 ______________________________________________

回到初衷

  ——也就是設計 cookie 的目的。因為 HTTP 本身是無狀態的會話,但是很多時需要一個有狀態的會話,為了這個需求設計出來了 HTTP 狀態管理機制(HTTP State Management Mechanism),即 cookie 。而一般的會話又不需要儲存大量資訊客戶端(一般都為瀏覽器),所以在設計這個 cookie 的時候並沒有考慮儲存大資料量時的情況,而且實際使用時也很少需要儲存大量資料到客戶端。

  假如需要儲存大量資料到客戶端怎麼辦呢?這裡想到了以下幾點:

  1. 限制使用者使用最新版 chrome/FireFox/Internet Explorer 瀏覽器,如果物件不是特別大則可以使用 
    Web Storage
  2. 在客戶端用一個 token 標識使用者在伺服器端對應的狀態,不過這個想控制好使用者的狀態,需要大量 AJAX 請求去伺服器端更改使用者狀態,需要伺服器牛X。實際用處也不大。
  3. 放棄用 Web 開發這個專案,使用 C/S 架構。