摘要:追蹤記錄和分析用戶行為。屬性返回一個布爾值,表示瀏覽器是否打開功能。超過限制以后,將被忽略,不會被設置。屬性指定瀏覽器只有在加密協議下,才能將這個發送到服務器。屬性值必須是當前發送的域名的一部分。
Cookie 是服務器保存在瀏覽器的一小段文本信息,每個 Cookie 的大小一般不能超過4KB。瀏覽器每次向服務器發出請求,就會自動附上這段信息。
Cookie 主要用來分辨兩個請求是否來自同一個瀏覽器,以及用來保存一些狀態信息。
常用場合:
1.對話(session)管理:保存登錄、購物車等需要記錄的信息。
2.個性化:保存用戶的偏好,比如網頁的字體大小、背景色等等。
3.追蹤:記錄和分析用戶行為。
不推薦作為客戶端儲存,缺乏數據操作接口,而且會影響性能。客戶端儲存應該使用 Web storage API 和 IndexedDB。
Cookie 包含以下幾方面的信息:
1.Cookie 的名字
2.Cookie 的值(真正的數據寫在這里面)
3.到期時間
4.所屬域名(默認是當前域名)
5.生效的路徑(默認是當前網址)
瀏覽器可以設置不接受 Cookie,也可以設置不向服務器發送 Cookie。window.navigator.cookieEnabled屬性返回一個布爾值,表示瀏覽器是否打開 Cookie 功能。
// 瀏覽器是否打開 Cookie 功能 window.navigator.cookieEnabled // true
document.cookie屬性返回當前網頁的 Cookie。
一般來說,單個域名設置的 Cookie 不應超過30個,每個 Cookie 的大小不能超過4KB。超過限制以后,Cookie 將被忽略,不會被設置。
Cookie與 HTTP 協議服務器如果希望在瀏覽器保存 Cookie,就要在 HTTP 回應的頭信息里面,放置一個Set-Cookie字段。
Set-Cookie:foo=bar//在瀏覽器保存一個名為foo的 Cookie,它的值為bar。
HTTP 回應可以包含多個Set-Cookie字段,即在瀏覽器生成多個 Cookie。
HTTP/1.0 200 OKContent-type: text/htm lSet-Cookie: yummy_cookie=choco Set-Cookie: tasty_cookie=strawberryHTTP 請求:Cookie 的發送
瀏覽器向服務器發送 HTTP 請求時,每個請求都會帶上相應的 Cookie。也就是說,把服務器早前保存在瀏覽器的這段信息,再發回服務器。這時要使用 HTTP 頭信息的Cookie字段。
Cookie: foo=bar//向服務器發送名為foo的 Cookie,值為bar
服務器收到瀏覽器發來的 Cookie 時,有兩點是無法知道的。
Cookie 的各種屬性,比如何時過期。
哪個域名設置的 Cookie,到底是一級域名設的,還是某一個二級域名設的。
例子:
GET /sample_page.html HTTP/1.1Host: www.example.orgCookie: yummy_cookie=choco; tasty_cookie=strawberryCookie 的屬性
Expires屬性指定一個具體的到期時間,到了指定時間以后,瀏覽器就不再保留這個 Cookie。它的值是 UTC 格式,可以使用Date.prototype.toUTCString()進行格式轉換。
如果不設置該屬性,或者設為null,Cookie 只在當前會話(session)有效,瀏覽器窗口一旦關閉,當前 Session 結束,該 Cookie 就會被刪除。瀏覽器根據本地時間,決定 Cookie 是否過期,由于本地時間是不精確的,所以沒有辦法保證 Cookie 一定會在服務器指定的時間過期。
Max-Age屬性指定從現在開始 Cookie 存在的秒數,比如60 60 24 * 365(即一年)。過了這個時間以后,瀏覽器就不再保留這個 Cookie。
如果Set-Cookie字段沒有指定Expires或Max-Age屬性,那么這個 Cookie 就是 Session Cookie,即它只在本次對話存在,一旦用戶關閉瀏覽器,瀏覽器就不會再保留這個 Cookie。
Path屬性指定瀏覽器發出 HTTP 請求時,哪些路徑要附帶這個 Cookie。只要瀏覽器發現,Path屬性是 HTTP 請求路徑的開頭一部分,就會在頭信息里面帶上這個 Cookie。比如,PATH屬性是/,那么請求/docs路徑也會包含該 Cookie。當然,前提是域名必須一致。
Secure屬性指定瀏覽器只有在加密協議 HTTPS 下,才能將這個 Cookie 發送到服務器。另一方面,如果當前協議是 HTTP,瀏覽器會自動忽略服務器發來的Secure屬性。該屬性只是一個開關,不需要指定值。如果通信是 HTTPS 協議,該開關自動打開。
HttpOnly屬性指定該 Cookie 無法通過 JavaScript 腳本拿到,主要是Document.cookie屬性、XMLHttpRequest對象和 Request API 都拿不到該屬性。這樣就防止了該 Cookie 被腳本讀到,只有瀏覽器發出 HTTP 請求時,才會帶上該 Cookie。
document.cookiedocument.cookie屬性用于讀寫當前網頁的 Cookie。
讀取的時候,它會返回當前網頁的所有 Cookie,前提是該 Cookie 不能有HTTPOnly屬性。
document.cookie // "foo=bar;baz=bar"
document.cookie屬性是可寫的,可以通過它為當前網站添加 Cookie。
document.cookie = "fontSize=14";
各個屬性的寫入注意點如下。
**1.path屬性必須為絕對路徑,默認為當前路徑。
2.domain屬性值必須是當前發送 Cookie 的域名的一部分。比如,當前域名是example.com,就不能將其設為foo.com。該屬性默認為當前的一級域名(不含二級域名)。
3.max-age屬性的值為秒數。
4.expires屬性的值為 UTC 格式,可以使用Date.prototype.toUTCString()進行日期格式轉換。**
document.cookie寫入 Cookie 的例子如下。
document.cookie = "fontSize=14; " + "expires=" + someDate.toGMTString() + "; " + "path=/subdirectory; " + "domain=*.example.com";
Cookie 的屬性一旦設置完成,就沒有辦法讀取這些屬性的值。
實現跨頁面傳值:
var cookieUtil = { //添加cookie setCookie: function (name, value, expires) { var cookieText = encodeURIComponent(name) + "=" + encodeURIComponent(value); if (expires && expires instanceof Date) { cookieText += "; expires=" + expires; } // if (domain) { // cookieText += "; domain=" + domain; // } document.cookie = cookieText; }, //獲取cookie getCookie: function (name) { var cookieText = decodeURIComponent(document.cookie); var cookieArr = cookieText.split("; "); for (var i = 0; i < cookieArr.length; i++) { var arr = cookieArr[i].split("="); if (arr[0] == name) { return arr[1]; } } return null; }, //刪除cookie unsetCookie: function (name) { document.cookie = encodeURIComponent(name) + "=; expires=" + new Date(0); } }; //判斷是否存在cookie,或是第一次添加 var arr = cookieUtil.getCookie("car") ? JSON.parse(cookieUtil.getCookie("car")) : []; var date = new Date(); date.setDate(date.getDate() + 1); //保存十天 //保存cookie cookieUtil.setCookie("car", JSON.stringify(arr), date);
//讀取cookie var arr = cookieUtil.getCookie("car"); if (arr) { arr = JSON.parse(arr); //存在cookie則取出來顯示到頁面上 for (var i = 0; i < arr.length; i++) { ...} }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/107793.html
摘要:保存中文上面我們的例子保存的是英文字符,下面我們來看下保存中文字符會怎么樣。出異常了中文屬于字符,英文數據字符,中文占個字符或者個字符,英文占個字符。如果為,則表示刪除該。的值規定為域名的隱私安全機制決定是不可跨域名的。 什么是會話技術 基本概念: 指用戶開一個瀏覽器,訪問一個網站,只要不關閉該瀏覽器,不管該用戶點擊多少個超鏈接,訪問多少資源,直到用戶關閉瀏覽器,整個這個過程我們稱為一...
摘要:追蹤記錄和分析用戶行為。屬性返回一個布爾值,表示瀏覽器是否打開功能不同瀏覽器對數量和大小的限制,是不一樣的。請求的發送瀏覽器向服務器發送請求時,每個請求都會帶上相應的。屬性必須為絕對路徑,默認為當前路徑。屬性值必須是當前發送的域名的一部分。 概述Cookie 與 HTTP 協議HTTP 回應:Cookie 的生成HTTP 請求:Cookie 的發送Cookie 的屬性Expires,M...
摘要:首先先來一段總結用于本地數據存儲,出現在服務器和瀏覽器交互的響應頭部和請求頭部中,受到單域名下的數量單個大小性能安全限制。子技術的出現緩解了單域名下的數量限制,關于子有一整套工具函數可以使用。 前言 本篇主要介紹Cookie技術的讀書總結,但是我認為邏輯上最好會和Web Storage技術放在一起進行對比,因此后續會再總結一篇關于WEB存儲的姊妹總結,敬請期待。 首先先來一段總結:Co...
摘要:首先先來一段總結用于本地數據存儲,出現在服務器和瀏覽器交互的響應頭部和請求頭部中,受到單域名下的數量單個大小性能安全限制。子技術的出現緩解了單域名下的數量限制,關于子有一整套工具函數可以使用。 前言 本篇主要介紹Cookie技術的讀書總結,但是我認為邏輯上最好會和Web Storage技術放在一起進行對比,因此后續會再總結一篇關于WEB存儲的姊妹總結,敬請期待。 首先先來一段總結:Co...
閱讀 1428·2021-11-15 11:38
閱讀 3577·2021-11-09 09:47
閱讀 1976·2021-09-27 13:36
閱讀 3222·2021-09-22 15:17
閱讀 2560·2021-09-13 10:27
閱讀 2871·2019-08-30 15:44
閱讀 1180·2019-08-27 10:53
閱讀 2712·2019-08-26 14:00