1. 程式人生 > >JavaScript中的document.cookie的使用

JavaScript中的document.cookie的使用

我們已經知道,在 document 物件中有一個 cookie 屬性。但是 Cookie 又是什麼?“某些 Web 站點在您的硬碟上用很小的文字檔案儲存了一些資訊,這些檔案就稱為 Cookie。”—— MSIE 幫助。一般來說,Cookies 是 CGI 或類似,比 HTML 高階的檔案、程式等建立的,但是 javascript 也提供了對 Cookies 的很全面的訪問權利。

  我們先要學一學 Cookie 的基本知識。

  每個 Cookie 都是這樣的:<cookie名>=<值>

  <cookie名>的限制與 javascript 的命名限制大同小異,少了“不能用 javascript 關鍵字”,多了“只能用可以用在 URL 編碼中的字元”。後者比較難懂,但是隻要你只用字母和數字命名,就完全沒有問題了。<值>的要求也是“只能用可以用在 URL 編碼中的字元”。



  每個 Cookie 都有失效日期,一旦電腦的時鐘過了失效日期,這個 Cookie 就會被刪掉。我們不能直接刪掉一個 Cookie,但是可以用設定失效日期早於現在時刻的方法來間接刪掉它。

  每個網頁,或者說每個站點,都有它自己的 Cookies,這些 Cookies 只能由這個站點下的網頁來訪問,來自其他站點或同一站點下未經授權的區域的網頁,是不能訪問的。每一“組”Cookies 有規定的總大小(大約 2KB 每“組”),一超過最大總大小,則最早失效的 Cookie 先被刪除,來讓新的 Cookie“安家”。

  現在我們來學習使用 documents.cookie 屬性。

  如果直接使用 documents.cookie 屬性,或者說,用某種方法,例如給變數賦值,來獲得 documents.cookie 的值,我們就可以知道在現在的文件中有多少個 Cookies,每個 Cookies 的名字,和它的值。例如,在某文件中新增“document.write(documents.cookie)”,結果顯示:


name=kevin; [email protected]; lastvisited=index.html

這意味著,文件包含 3 個 Cookies:name, email 和 lastvisited,它們的值分別是 kevin, [email protected] 和 index.html。可以看到,兩個 Cookies 之間是用分號和空格隔開的,於是我們可以用 cookieString.split('; ') 方法得到每個 Cookie 分開的一個數組(先用 var cookieString = documents.cookie)。

  設定一個 Cookie 的方法是對 documents.cookie 賦值。與其它情況下的賦值不同,向 documents.cookie 賦值不會刪除掉原有的 Cookies,而只會增添 Cookies 或更改原有 Cookie。賦值的格式:


documents.cookie = 'cookieName=' + escape('cookievalue')
+ ';expires=' + expirationDateObj.toGMTString();


是不是看到頭暈了呢?cookieName 表示 Cookie 的名稱,cookievalue 表示 Cookie 的值,expirationDateObj 表示儲存著失效日期的日期物件名,如果不需要指定失效日期,則不需要第二行。不指定失效日期,則瀏覽器預設是在關閉瀏覽器(也就是關閉所有視窗)之後過期。

  首先 escape() 方法:為什麼一定要用?因為 Cookie 的值的要求是“只能用可以用在 URL 編碼中的字元”。我們知道“escape()”方法是把字串按 URL 編碼方法來編碼的,那我們只需要用一個“escape()”方法來處理輸出到 Cookie 的值,用“unescape()”來處理從 Cookie 接收過來的值就萬無一失了。而且這兩個方法的最常用途就是處理 Cookies。其實設定一個 Cookie 只是“documents.cookie = 'cookieName=cookievalue'”這麼簡單,但是為了避免在 cookievalue 中出現 URL 裡不準出現的字元,還是用一個 escape() 好。
  然後“expires”前面的分號:注意到就行了。是分號而不是其他。
  最後 toGMTString() 方法:設定 Cookie 的時效日期都是用 GMT 格式的時間的,其它格式的時間是沒有作用的。

  現在我們來實戰一下。設定一個“name=rose”的 Cookie,在 3 個月後過期。

var expires = new Date();
expires.setTime(expires.getTime() + 3 * 30 * 24 * 60 * 60 * 1000);
/* 三個月 x 一個月當作 30 天 x 一天 24 小時
x 一小時 60 分 x 一分 60 秒 x 一秒 1000 毫秒 */
documents.cookie = 'name=rose;expires=' + expires.toGMTString();

為什麼沒有用 escape() 方法?這是因為我們知道 rose 是一個合法的 URL 編碼字串,也就是說,'rose' == escape('rose')。一般來說,如果設定 Cookie 時不用 escape(),那獲取 Cookie 時也不用 unescape()。

  再來一次:編寫一個函式,作用是查詢指定 Cookie 的值。

function getCookie(cookieName) {
var cookieString = documents.cookie;
var start = cookieString.indexOf(cookieName + '=');
// 加上等號的原因是避免在某些 Cookie 的值裡有
// 與 cookieName 一樣的字串。
if (start == -1) // 找不到
return null;
start += cookieName.length + 1;
var end = cookieString.indexOf(';', start);
if (end == -1) return unescape(cookieString.substring(start));
return unescape(cookieString.substring(start, end));
}

這個函式用到了字串物件的一些方法,如果你不記得了(你是不是這般沒記性啊),請快去查查。這個函式所有的 if 語句都沒有帶上 else,這是因為如果條件成立,程式執行的都是 return 語句,在函式裡碰上 return,就會終止執行,所以不加 else 也沒問題。該函式在找到 Cookie 時,就會返回 Cookie 的值,否則返回“null”。

  現在我們要刪除剛才設定的 name=rose Cookie。

var expires = new Date();
expires.setTime(expires.getTime() - 1);
documents.cookie = 'name=rose;expires=' + expires.toGMTString();

可以看到,只需要把失效日期改成比現在日期早一點(這裡是早 1 毫秒),再用同樣的方法設定 Cookie,就可以刪掉 Cookie 了。

附一個老外寫的js操作cookie的函式:

[javascript] view plain copy
  1. ///設定cookie 
  2. function setCookie(NameOfCookie, value, expiredays)   
  3. {   
  4. //@引數:三個變數用來設定新的cookie: 
  5. //cookie的名稱,儲存的Cookie值, 
  6. // 以及Cookie過期的時間. 
  7. // 這幾行是把天數轉換為合法的日期 
  8. var ExpireDate = new Date ();   
  9. ExpireDate.setTime(ExpireDate.getTime() + (expiredays * 24 * 3600 * 1000));   
  10. // 下面這行是用來儲存cookie的,只需簡單的為"document.cookie"賦值即可. 
  11. // 注意日期通過toGMTstring()函式被轉換成了GMT時間。 
  12. document.cookie = NameOfCookie + "=" + escape(value) +   
  13.   ((expiredays == null) ? "" : "; expires=" + ExpireDate.toGMTString());   
  14. }   
  15. ///獲取cookie值 
  16. function getCookie(NameOfCookie)   
  17. {   
  18. // 首先我們檢查下cookie是否存在. 
  19. // 如果不存在則document.cookie的長度為0 
  20. if (document.cookie.length > 0)   
  21. {   
  22. // 接著我們檢查下cookie的名字是否存在於document.cookie 
  23. // 因為不止一個cookie值儲存,所以即使document.cookie的長度不為0也不能保證我們想要的名字的cookie存在 
  24. //所以我們需要這一步看看是否有我們想要的cookie 
  25. //如果begin的變數值得到的是-1那麼說明不存在 
  26. begin = document.cookie.indexOf(NameOfCookie+"=");   
  27. if (begin != -1)      
  28. {   
  29. // 說明存在我們的cookie. 
  30. begin += NameOfCookie.length+1;//cookie值的初始位置 
  31. end = document.cookie.indexOf(";", begin);//結束位置 
  32. if (end == -1) end = document.cookie.length;//沒有;則end為字串結束位置 
  33. return unescape(document.cookie.substring(begin, end)); }   
  34. }   
  35. returnnull;   
  36. // cookie不存在返回null 
  37. }   
  38. ///刪除cookie 
  39. function delCookie (NameOfCookie)   
  40. {   
  41. // 該函式檢查下cookie是否設定,如果設定了則將過期時間調到過去的時間; 
  42. //剩下就交給作業系統適當時間清理cookie啦 
  43. if (getCookie(NameOfCookie)) {   
  44. document.cookie = NameOfCookie + "=" +   
  45. "; expires=Thu, 01-Jan-70 00:00:01 GMT";   
  46. }   
  47. }  

演示檔案

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <htmlxmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <metahttp-equiv="Content-Type"content="text/html; charset=utf-8"/>
  5. <title>Cookie</title>
  6. <mce:styletype="text/css"><!--  
  7. #welcome h3   
  8. {   
  9. font-weight:normal;   
  10. color:#800;   
  11. }   
  12. --></mce:style><styletype="text/css"mce_bogus="1">
  13. #welcome h3   
  14. {   
  15. font-weight:normal;   
  16. color:#800;   
  17. </style>
  18. <mce:scripttype="text/javascript"src="cookie.js"mce_src="cookie.js"></mce:script>
  19. <mce:scripttype="text/javascript"><!--  
  20. //---------------使用cookie----------------------   
  21. function useCookie()   
  22. {   
  23. var username=getCookie("username");   
  24. if(username!=null){   
  25. document.getElementById('welcome').innerHTML="<h3>歡迎您,"+username+"</h3>"+"<buttononclick='delusr();'>刪除使用者名稱</button>";   
  26. }else{   
  27. var str="<h3>歡迎您,遊客!</h3>"+   
  28.   "<inputid='usrname'type='text'/>"+   
  29.   "<buttonid='saveusr'onclick='checksave();'>儲存使用者名稱</button>";   
  30. document.getElementById('welcome').innerHTML=str;   
  31. }   
  32. }   
  33. function checksave()   
  34. {   
  35. var el=document.getElementById('usrname');   
  36. if(el.value){   
  37. setCookie("username",el.value);   
  38. location.reload();//重新整理頁面   
  39. }   
  40. else   
  41. alert("輸入框不能為空");   
  42. }   
  43. function delusr()   
  44. {   
  45. delCookie("username");   
  46. location.reload();   
  47. }   
  48. // --></mce:script>
  49. </head>
  50. <bodyonload="useCookie();">
  51. <divid="welcome">
  52. </div>
  53. </body>
  54. </html>

相關推薦

Javascriptdocument.execCommand()的用法

class 規格 列表框 script 單擊 height width per 移動 document.execCommand()方法處理Html數據時常用語法格式如下: document.execCommand(sCommand[,交互方式, 動態參數])

Javascriptdocument.execCommand()的用法 ( 實現瀏覽器菜單的很多功能 )

靈活 css true htm upload 目錄 listbox 而不是 lds document.execCommand()方法處理Html數據時常用語法格式如下:document.execCommand(sCommand[,交互方式, 動態參數])其中:sComman

JSdocument.cookie詳解

一個 參數 position 函數實現 some document urn 重新 地址 什麽是cookie? cookie 是存儲於訪問者的計算機中的變量。每當同一臺計算機通過瀏覽器請求某個頁面時,就會發送這個 cookie。你可以使用 JavaScript 來創建和取回

JavaScriptJavascriptdocument.execCommand()的用法

停止 ouya browser 剪貼板 form 折騰 bookmark 水平線 man Javascript中document.execCommand()的用法 合並轉載: 轉載出處1 轉載出處2 document.execCommand()方法處理Html數據時常用語法

javascriptdocument物件的知識點

javascript中document物件的知識點 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>javascript中document物件的知識點,雪豹軟體

如何在JavaScript設定cookie

cookie的最基本的儲存形式是“name=value”,所以用JavaScript建立cookie的最簡單的語法就是document.cookie="name=value";一般來說都會為cookie的儲存,讀取,刪除設定不同的函式,方便在程式中進行呼叫。    //儲存cookie    functi

JavaScriptdocument.cookie的使用

我們已經知道,在 document 物件中有一個 cookie 屬性。但是 Cookie 又是什麼?“某些 Web 站點在您的硬碟上用很小的文字檔案儲存了一些資訊,這些檔案就稱為 Cookie。”—— MSIE 幫助。一般來說,Cookies 是 CGI 或類似,比 HT

Javascript只能在 HTML 輸出流使用 document.write,在文件已載入後使用它(比如在函式),會覆蓋整個文件。

意思就是說,初次載入時如果沒有載入document.write,那麼再次載入的時候回覆蓋掉原來的內容,只顯示新載入的內容。 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8

HTML巢狀的JavaScript語言 document.getElementById(“”)函式的使用

1.語法:var 變數 = document .getElementById (“某一個標籤的ID名稱”) 引數:某一個標籤的ID名稱――必選項,為字串 (String) 。 如: 返回值:oElemen――物件 (Element) 。 <ol id="ol"> &

【小白】javascript的“文件已完成載入後執行 document.write,整個 HTML 頁面將被覆蓋”

document.write已經遇到過好幾次了,還是得弄弄清楚。 W3cschool上面有一道練習題,如下(圖片1) 結果輸入的時候h1跟p段落全部被覆蓋,只有語句“糟糕!文件消失了” 圖片中出現

JavaScript document.open()方法

  document.open()方法開啟一個新的文件,並用document.write()方法編寫文件的內容,然後用document.close()方法關閉文件操作,並強制瀏覽器立即重新整理頁面內容

概念區分:JavaScript的global物件,window物件以及document物件

1、global物件(全域性物件) 《JS高階程式設計》中談到,global物件可以說是ECMAScript中對特別的一個物件了,因為不管你從什麼角度上看,這個物件都是不存在的。從某種意義上講,它是一

JavaScript 的函數介紹

所有 calculate 曾經 什麽 乘法 函數表達式 second 數字 brush 簡而言之函數只不過是一組執行某個操作的語句。函數可能會有一些輸入參數(在函數體中使用),並在執行後返回值。   JavaScript函數也具有這些特性,但它們不僅僅是常規函數。Java

JavaScriptthis的用法

屬於 指向 cti 用法 func 生成 純粹 ava 構造函數 this的使用環境有以下幾種 1、純粹的函數調用 純粹的函數調用屬於函數的最常用的用法,屬於全局性調用。在全局函數中,this等於window。 2、作為對象方法的調用 當函數不是全局調用,而是作為某個對象

javaScript奇葩的假值

http java color false javascrip fin sna 沒有 spa JavaScript中有 6 個值為“假”,這六個值是: false null undefined 0 ‘‘(空字符串) NaN 這裏面 false 本身是布爾類型,其它 5

JavaScript提供獲取HTML元素位置的屬性:

瀏覽器 var func set height cti fse 屬性 turn HTMLElement.offsetLeft HTMLElement.offsetHeight 但 是需要註意的是,這兩個屬性所儲存的數值並不是該元素相對整個瀏覽器畫布的絕對位置,而是相對於其父

JavaScriptvar變量引用function與直接聲明function

function 瀏覽器 開發 今天在h5開發app的過程中遇到了一個js問題,function的執行問題在js中聲明函數function有這兩種方法var A=function(){...}或者function A(){...}第一種稱之為變量引用函數,因為js允許函數作為一個值傳遞給變量,第二

JavaScript的call、apply、bind是怎麽回事?

ava 利用 參數 lock 們的 app scrip lac target 在JS中,這三者都是用來改變函數的this對象的指向的,他們有什麽樣的區別呢。在說區別之前還是先總結一下三者的相似之處:1、都是用來改變函數的this對象的指向的。2、第一個參數都是this要

asp.netcookie

再次 創建cookie bpa form void 並且 ima 顯示 red 一.cookie導讀,理解什麽是cookie 1.什麽是cookie:cookie是一種能夠讓網站服務器把少量數據(4kb左右)存儲到客戶端的硬盤或內存。並且讀可以取出來的一種技術。 2.

JavaScriptreturn的用法詳解

style 返回 www log tle blog 意思 charset fun 1、定義:return 從字面上的看就是返回,官方定義return語句將終止當前函數並返回當前函數的值,可以看下下面的示例代碼: <!DOCTYPE html><html l