摘要:為了解決這個問題,引入了機制。一寫入寫入主要設置五個字段,內容有效期域名路徑是否安全傳輸。被修改為要刪除,只需將該有效期設置到當前時間以前即可。其中有效期單位為天。
在他處看到一篇好文章,想記錄在自己的學習筆記中,原文作者看到我轉載若是介意,聯系我立馬就刪除,附上原文鏈接:
http://blog.csdn.net/sunhengzhe/article/details/46694039
首先要明確一下cookie的概念,因為HTTP協議是一種無狀態協議,也就是說一旦服務器和客戶端的數據交換完畢后,他們之間的連接就會被斷開,再次交換數據的時候就需要再次建立連接,這就意味著服務器無法從連接上判斷客戶端。
為了解決這個問題,W3C引入了cookie機制。cookie就好比一個身份證,客戶端請求服務器的時候,服務器將這個身份證頒發給客戶端,客戶端(瀏覽器)將這個身份證保存在本地,當下次連接服務器時,客戶端攜帶這個身份證請求服務器,服務器根據身份證即可確定用戶身份。
cookie不僅客戶端能訪問到,因為客戶端請求服務器的時候會將cookie放在請求頭里帶到服務器,所以服務器也能對cookie進行操作,這里討論使用javascript在客戶端對cookie進行操作的方法。
寫入cookie主要設置五個字段,內容、有效期、域名、路徑、是否安全傳輸。
內容cookie是以鍵值對形式保存的,要新建一個名為name,值為zhangsan的cookie就是“name=zhangsan”,只需將這個cookie賦值給document.cookie即可:
document.cookie = "name=zhangsan"; //添加cookie
document.cookie有讀和寫兩種形式,上面這個形式便是寫形式,寫形式代表添加cookie,且一次只能添加一條cookie,要添加多條則需要調用多次。如
document.cookie = "name=zhangsan;age=10"; //無效,只添加了name,忽略age document.cookie = "age=10"; //添加age有效期
默認情況下,cookie在關閉瀏覽器的時候就會被清除,想讓cookie存放更長時間可以通過設置expires字段實現。
expires字段需要的值是GMT(格林威治時間)格式的日期型字符串,可以用Date對象得到:
var date = new Date(); //將時間設置成30分鐘以后 date.setTime(date.getTime() + 30 * 60 * 1000); //name=zhangsan將在30分鐘后過期 document.cookie = "name=zhangsan;expires="+date.toGMTString();
想調整過期時間,只需要改動setTime一行的代碼。
域名處于安全性的考慮,cookie是具有不可跨域性的,用戶訪問百度的時候,百度為客戶端頒發了一個cookie,用戶再去訪問谷歌,谷歌給客戶端頒發一個cookie,那么百度和谷歌是不能訪問到彼此的cookie的。
但是一般來說,我們訪問baidu.com的時候會發現,你是可以訪問到map.baidu.com的cookie的,這是因為給cookie設置了domian屬性,因為map.baidu.com和baidu.com具有同樣的域名baidu.com,所以可以為cookie設置domian值為baidu.com
document.cookie = "name=zhangsan;domain=baidu.com";路徑
同樣道理,blog.csdn.net是訪問不到blog.csdn.net/sunhengzhe里面的cookie的(但反過來可以),為了使上級目錄訪問到下級目錄,在blog.csdn.net/sunhengzhe里新建cookie時,可以為cookie設置path屬性,一般可以直接將其設置為根目錄
document.cookie = "name=zhangsan;path=/";安全傳輸
cookie是保存在客戶端本地的,所以查看cookie是很方便,這也暴露了cookie的不安全性,所以一般cookie不存放如密碼等重要信息,secure屬性并不是用來設置cookie內容的安全性的,而是用于傳輸過程中的安全,設置secure后,只保證 cookie 與服務器之間的數據傳輸過程加密,而保存在本地的 cookie文件并不加密。所以如果是想讓本地保存的cookie也加密的話,最好在保存cookie值的時候就保存加密后的數據。
document.cookie = "name=zhangsan;secure";二、讀取cookie
讀取cookie使用到document.cookie的讀模式,返回的就是所有的cookie,中間用分號隔開。
document.cookie = "name=zhangsan"; //寫 document.cookie = "age=10"; //寫 console.log(document.cookie); //輸出 name=zhangsan; age=10三、刪除、修改cookie
cookie并不提供刪除、修改的方法,如果想修改某項cookie,只需添加一個同名cookie,新的值將覆蓋舊的值。
document.cookie = "name=zhangsan"; document.cookie = "name=lisi"; //name被修改為lisi
要刪除cookie,只需將該cookie有效期設置到當前時間以前即可。
var date = new Date(); //設置為前一毫秒(多前都可以) date.setTime(date.getTime() - 1); //刪除name document.cookie = "name=lisi;expires=" + date.toGMTString();四、封裝操作cookie的方法
使用原生方法對cookie操作是有些麻煩的,我們可以將其封裝起來,name代表鍵名,value代表值,不填則為讀取名為name的值,option代表設置值如有效期等。其中有效期單位為天。
function cookie(name, value, options) { if (typeof value != "undefined") { options = options || {}; //如果值為null, 刪除cookie if (value === null) { value = ""; options = { expires: -1 }; } //設置有效期 var expires = ""; if (options.expires && (typeof options.expires == "number" || options.expires.toGMTString)) { var date; if (typeof options.expires == "number") { date = new Date(); date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); } else { date = options.expires; } expires = ";expires=" + date.toGMTString(); } var path = options.path ? ";path=" + (options.path) : ""; var domain = options.domain ? ";domain=" + (options.domain) : ""; var secure = options.secure ? ";secure" : ""; //設置cookie document.cookie = [name, "=", encodeURIComponent(value), expires, path, domain, secure].join(""); } else { //讀取cookie if (document.cookie.length > 0) { var start = document.cookie.indexOf(name + "=") if (start != -1) { start = start + name.length + 1; var end = document.cookie.indexOf(";", start); if (end == -1){ end = document.cookie.length; } return decodeURIComponent(document.cookie.substring(start, end)); } } return "" } } cookie("name", "zhangsan"); //添加name=zhangsan cookie("name", null); // 刪除name cookie("age", "10", { expires: 30 }); // 添加age=10且有效期30天
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78357.html
摘要:如果您的瀏覽器已關閉本地支持,則以下示例均無效。刪除時,不必指定值。但事實并非如此。訪問者第一次到達網頁時,將要求他她填寫他她的姓名。檢查的功能最后,我們創建一個函數來檢查是否設置了。 JavaScript Cookie Cookie是計算機上存儲在小文本文件中的數據。當Web服務器將網頁發送到瀏覽器時,連接將關閉,服務器將忘記用戶的所有內容。發明Cookie是為了解決如何記住用戶信息...
摘要:本身是一些短小的信息,能夠由頁面保存在用戶的計算機上,然后被其他頁面讀取。當然,也有局限之處瀏覽器對于能夠保存的數量有所限制,通常是幾百個或者多一點。因此,不適合用來保存重要數據,在編寫代碼時也要考慮到獲取異常的處理方法。 ??首先先讓我們簡單地了解一下cookie.??在我們制作網頁的過程中,經常需要把信息從一個頁面傳遞給另一個頁面,這時候就需要用到JavaScript中的cooki...
摘要:假設有兩個域名域名域名域名有分級的概念,也就是說域名與域名都是的子域名,又是的子域名在域名所使用的服務中,可以設置域名在服務端設置的時候,設置為或沒有區別,注意前面的點,即只要是為顯式的聲明,前面帶不帶點沒有區別。 1 Cookie簡介 Cookie是由W3C組織提出,最早由NetScape社區發展的一種機制。Cookie是存儲于訪問者的計算機中的變量。每當同一臺計算機通過瀏覽器請求某...
摘要:假設有兩個域名域名域名域名有分級的概念,也就是說域名與域名都是的子域名,又是的子域名在域名所使用的服務中,可以設置域名在服務端設置的時候,設置為或沒有區別,注意前面的點,即只要是為顯式的聲明,前面帶不帶點沒有區別。 1 Cookie簡介 Cookie是由W3C組織提出,最早由NetScape社區發展的一種機制。Cookie是存儲于訪問者的計算機中的變量。每當同一臺計算機通過瀏覽器請求某...
摘要:一垃圾回收與內存泄漏參考內存控制垃圾回收的垃圾回收策略主要基于分代式垃圾回收機制。內存泄漏內存泄漏的實質就是應當回收的對象因為意外沒有被回收,變成了常駐在老生代中的對象。造成內存泄漏的主要原因有緩存隊列消費不及時作用域未釋放。 內容 1.內存泄漏與垃圾回收2.cookie和session3.單線程原理4.上下左右居中的幾種實現。5.BFC和IFC模型。 一、垃圾回收與內存泄漏 參考:內...
閱讀 2211·2021-11-22 13:54
閱讀 3376·2019-08-29 12:25
閱讀 3440·2019-08-28 18:29
閱讀 3579·2019-08-26 13:40
閱讀 3275·2019-08-26 13:32
閱讀 955·2019-08-26 11:44
閱讀 2229·2019-08-23 17:04
閱讀 2968·2019-08-23 17:02