cookie 是以 鍵/值 對的形式存在的,每一個「 變量 」對應一個值,相互之間以分號隔開,以下所示:
username=itxueyuan;password=123456;age=22
總結:cookie一般用來保存服務器的信息(或者說維持會話),由服務端程序或者JavaScript腳本寫入,在後續請求中,供服務器讀取。 javascript
修改和刪除cookie java
JavaScript 經過 document.cookie 來修改和刪除 cookie 。
JavaScript 在設置 cookie 時會遵循這樣一條原則:新設置的 cookie 若是與原有的 cookie 相同(名稱、路徑和域名都相同),會將原有的 cookie 覆蓋(採用新 cookie) 。
這就給咱們提供了一種修改和刪除 cookie 的方法——直接覆蓋原有的 cookie 。
例如,有這樣一個 cookie:
username=itxueyuan;expire=1369929124191;path=/;domain=www.itxueyuan.org
將用戶名修改成「JavaScript」,並設置一天後過時: 數據庫
var date=new Date(); var cookieExpire=date.getTime()+24*3600*1000; // 修改 cookie 時,名稱、路徑和域名必須相同 document.cookie=" username=JavaScript ; expire= " + cookieExpire + " ;path=/;domain=www.itxueyuan.org ";
刪除該cookie 瀏覽器
var date=new Date(); var cookieExpire=date.getTime()-1000; // 設置爲一個過去的時間/ / 刪除 cookie 時,名稱、路徑和域名必須相同 document.cookie=" username=JavaScript ; expire= " + cookieExpire + " ;path=/;domain=www.itxueyuan.org ";
注:爲了刪除一個cookie,能夠將其過時時間設定爲一個過去的時間 服務器
JavaScript設置cookie cookie
鍵/值 對 | 說明 |
---|---|
name=value | 必需。設置cookie的名稱和值,一次只能設置一個。 在cookie的名稱或值中不會出現分號( ; )、逗號( , )、等號( = )、空格以及中文等,不然將會被瀏覽器編碼。在cookie的名稱中作到這點很容易(名稱通常是開發人員設定好的),可是保存的值是不肯定的,如何來存儲這些值呢?方法是用escape()函數進行編碼,它能將一些特殊符號使用十六進制表示,例如空格將會編碼爲「20%」,從而能夠存儲於cookie值 中,並且使用此種方案還能夠避免中文亂碼的出現。 例如,將「小明」存入cookie: document.cookie="username="+eacape("小明"); |
expire=GMT_String | 可選。設置cookie的過時時間。 默認狀況下(不設置expire),用戶關閉瀏覽器時會銷燬cookie,這些cookie僅僅是存儲在內存中,而沒有創建相應的硬盤文件。在實際開發中,cookie 一般須要長期保存,例如保存用戶登陸的狀態,能夠經過設置 cookie 的過時時間來實現。 過時時間是以GMT格式表示的時間字符串,超過這個時間,cookie將消失,不可訪問。 例如,若是要將cookie設置爲10天后過時: var date=new Date(); // 更多請參考 JavaScript Date 對象 var expireDays=10; date.setTime(date.getTime()+expireDays*24*3600*1000); |
path=cookieDir | 可選。設置cookie的有效路徑。 默認狀況下(不設置path),cookie只在當前路徑下有效,路徑範圍以外不能訪問該cookie。例如,在 /javascript/jiaocheng/ 路徑下設置的cookie,只能被 /javascript/jiaocheng/ 路徑下的文件以及子目錄下的文件訪問。 要使 cookie 全站有效,請設置 path=/ 。 |
domain=cookieDomain | 可選。設置cookie的有效域名。 默認狀況下(不設置 domain),cookie 只在當前域名下有效。例如,在 demo.itxueyuan.org 下設置的 cookie ,不能在 javascript.itxueyuan.org 域名下訪問。 要使 cookie 在 itxueyuan.org 的全部二級域名和主域名下都有效,請設置domain=.itxueyuan.org |
document.cookie=" name=xiaoming ";
var cookieValue=" 小明 "; document.cookie=" name= "+escape(cookieValue) ;
document.cookie=" name=xiaoming ; path=/ ";
var date=new Date(); // 建立日期對象 var cookieExpire=date.getTime()+24*3600*1000; // 以微妙計算document.cookie=" name=xiaoming ; expire= "+cookieExpire;
var username="小明"; var password="123456"; var expire=(new Date()).getTime()+1000*3600*24*30; document.cookie = " username=" + escape(username) + " expire=" + expire + " ; path=/ ; domain=.itxueyuan.org "; document.cookie = " password=" + escape(password) + " expire=" + expire + " ; path=/ ; domain=.itxueyuan.org ";
<input id="demo1" type="button" value="獲取cookie" /> <script type="text/javascript"> document.getElementById("demo1").onclick=function(){ alert(document.cookie); } </script>咱們能夠自定義一個函數來獲取單個 cookie 的值。
/** * func getCookie() 獲取單個cookie的值 * pram cookieName cookie的名稱**/ function getCookie(cookieName){ var cookieObj={},cookieSplit=[],// 以分號(;)分組 cookieArr=document.cookie.split(";"); for(var i=0,len=cookieArr.length;i<len;i++) if(cookieArr[i]) {// 以等號(=)分組 cookieSplit=cookieArr[i].split("="); // Trim() 是自定義的函數,用來刪除字符串兩邊的空格 cookieObj[cookieSplit[0].Trim()]=cookieSplit[1].Trim(); } return cookieObj[cookieName]; }
getCookie["name"];
/** * func getCookieObj() 獲取全部cookie的值並將其保存爲對象的屬性**/ function getCookieObj(){ var cookieObj={},cookieSplit=[], // 以分號(;)分組 cookieArr=document.cookie.split(";"); for(var i=0,len=cookieArr.length;i<len;i++) if(cookieArr[i]) { // 以等號(=)分組 cookieSplit=cookieArr[i].split("="); // Trim() 是自定義的函數,用來刪除字符串兩邊的空格 cookieObj[cookieSplit[0].Trim()]=cookieSplit[1].Trim(); } return cookieObj; }
var cookieObj=getCookieObj(); cookieObj.name;