javascript基礎五 (cookie基礎)
阿新 • • 發佈:2019-02-15
/** * 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 的時候並沒有考慮儲存大資料量時的情況,而且實際使用時也很少需要儲存大量資料到客戶端。
假如需要儲存大量資料到客戶端怎麼辦呢?這裡想到了以下幾點:
-
限制使用者使用最新版 chrome/FireFox/Internet Explorer 瀏覽器,如果物件不是特別大則可以使用
- 在客戶端用一個 token 標識使用者在伺服器端對應的狀態,不過這個想控制好使用者的狀態,需要大量 AJAX 請求去伺服器端更改使用者狀態,需要伺服器牛X。實際用處也不大。
- 放棄用 Web 開發這個專案,使用 C/S 架構。