1. 程式人生 > >關於Cookie的原理、作用,區別以及使用

關於Cookie的原理、作用,區別以及使用

1、cookie的作用:

我們在瀏覽器中,經常涉及到資料的交換,比如你登入郵箱,登入一個頁面。我們經常會在此時設定30天內記住我,或者自動登入選項。那麼它們是怎麼記錄資訊的呢,答案就是今天的主角cookie了,Cookie是由HTTP伺服器設定的,儲存在瀏覽器中,但HTTP協議是一種無狀態協議,在資料交換完畢後,伺服器端和客戶端的連結就會關閉,每次交換資料都需要建立新的連結。就像我們去超市買東西,沒有積分卡的情況下,我們買完東西之後,超市沒有我們的任何消費資訊,但我們辦了積分卡之後,超市就有了我們的消費資訊。cookie就像是積分卡,可以儲存積分,商品就是我們的資訊,超市的系統就像伺服器後臺,http協議就是交易的過程。

2、機制的區別:

session機制採用的是在伺服器端保持狀態的方案,而cookie機制則是在客戶端保持狀態的方案,cookie又叫會話跟蹤機制。開啟一次瀏覽器到關閉瀏覽器算是一次會話。說到這裡,講下HTTP協議,前面提到,HTTP協議是一種無狀態協議,在資料交換完畢後,伺服器端和客戶端的連結就會關閉,每次交換資料都需要建立新的連結。此時,伺服器無法從連結上跟蹤會話。cookie可以跟蹤會話,彌補HTTP無狀態協議的不足。

3、cookie的分類:

cookie分為會話cookie和持久cookie,會話cookie是指在不設定它的生命週期expires時的狀態,前面說了,瀏覽器的開啟到關閉就是一次會話,當關閉瀏覽器時,會話cookie就會跟隨瀏覽器而銷燬。當關閉一個頁面時,不影響會話cookie的銷燬。會話cookie就像我們沒有辦理積分卡時,單一的買賣過程,離開之後,資訊則銷燬。

持久cookie則是設定了它的生命週期expires,此時,cookie像商品一樣,有個保質期,關閉瀏覽器之後,它不會銷燬,直到設定的過期時間。對於持久cookie,可以在同一個瀏覽器中傳遞資料,比如,你在開啟一個淘寶頁面登陸後,你在點開一個商品頁面,依然是登入狀態,即便你關閉了瀏覽器,再次開啟瀏覽器,依然會是登入狀態。這就是因為cookie自動將資料傳送到伺服器端,在反饋回來的結果。持久cookie就像是我們辦理了一張積分卡,即便離開,資訊一直保留,直到時間到期,資訊銷燬。

4、簡單的使用cookie的程式碼

cookie的幾種常見屬性:document.cookie="key=value;expires=失效時間;path=路徑;domain=域名;secure;(secure表安全級別),

cookie以字串的形式儲存在瀏覽器中。下面貼段程式碼出來,是一個類似購物網站的將商品新增到購物車,再從購物車還原商品資訊的過程,是自己用原生JS封裝的函式。

封裝的cookie的存入,讀取以及刪除的函式:(這裡是將資訊以物件的形式存放到cookie中的,會用到JSON的知識)

[javascript] view plain copy
  1. // key : cookie 名
  2. // value : cookie 值
  3. // options : 可選配置引數
  4. //      options = {
  5. //          expires : 7|new Date(), // 失效時間
  6. //          path : "/", // 路徑
  7. //          domain : "", // 域名
  8. //          secure : true // 安全連線
  9. //      }
  10. function cookie(key, value, options) {  
  11.     /* read 讀取 */
  12.     // 如果沒有傳遞 value ,則表示根據 key 讀取 cookie 值
  13.     if (typeof value === "undefined") { // 讀取
  14.         // 獲取當前域下所有的 cookie,儲存到 cookies 陣列中
  15.         var cookies = document.cookie.split("; ");  
  16.         // 遍歷 cookies 陣列中的每個元素
  17.         for (var i = 0, len = cookies.length; i < len; i++) {  
  18.             // cookies[i] : 當前遍歷到的元素,代表的是 "key=value" 意思的字串,
  19.             // 將字串以 = 號分割返回的陣列中第一個元素表示 key,
  20.             // 第二個元素表示 value
  21.             var cookie = cookies[i].split("=");  
  22.             // 判斷是否是要查詢的 key,對查詢的 key 、value 都要做解碼操作
  23.             if (decodeURIComponent(cookie[0]) === key) {  
  24.                 return decodeURIComponent(cookie[1]);  
  25.             }  
  26.         }  
  27.         // 沒有查詢到指定的 key 對應的 value 值,則返回 null
  28.         returnnull;  
  29.     }  
  30.     /* 存入 設定 */
  31.     // 設定 options 預設為空物件
  32.     options = options || {};  
  33.     // key = value,物件 key,value 編碼
  34.     var cookie = encodeURIComponent(key) + "=" + encodeURIComponent(value);  
  35.     // 失效時間
  36.     if ((typeof options.expires) !== "undefined") { // 有配置失效時間
  37.         if (typeof options.expires === "number") { // 失效時間為數字
  38.             var days = options.expires,   
  39.                 t = options.expires = new Date();  
  40.             t.setDate(t.getDate() + days);  
  41.         }   
  42.         cookie += ";expires=" + options.expires.toUTCString();  
  43.     }  
  44.     // 路徑
  45.     if (typeof options.path !== "undefined")  
  46.         cookie += ";path=" + options.path;  
  47.     // 域名
  48.     if (typeof options.domain !== "undefined")  
  49.         cookie += ";domain=" + options.domain;  
  50.     // 安全連線
  51.     if (options.secure)  
  52.         cookie += ";secure";  
  53.     // 儲存
  54.     document.cookie = cookie;  
  55. }  
  56. // 從所有的 cookie 中刪除指定的 cookie
  57. function removeCookie(key, options) {  
  58.     options = options || {};  
  59.     options.expires = -1; // 將失效時間設定為 1 天前
  60.     cookie(key, "", options);  
  61. }  

下面是商品詳情頁的JS程式碼[javascript] view plain copy
  1. // 找到所有的 “新增到購物車” 超級連結
  2.             var links = $("a", $("#tab"));  
  3.             // 迴圈,為每個 “新增到購物車” 的超級連結新增點選事件
  4.             for (var i = 0, len = links.length; i < len; i++) {  
  5.                 links[i].onclick = function(){  
  6.                     // 獲取當前超級連結所在行的所有單元格
  7.                     var _cells = this.parentNode.parentNode.cells;  
  8.                     // 獲取到即將新增到購物車中的商品資訊
  9.                     var _id = _cells[0].innerHTML,  
  10.                         _name = _cells[1].innerHTML,  
  11.                         _price = _cells[2].innerHTML;  
  12.                     // 將商品資訊包裝到一個物件中
  13.                     var product = {  
  14.                         id : _id,  
  15.                         name : _name,  
  16.                         price : _price,  
  17.                         amount : 1  
  18.                     };  
  19.                     /* 將當前選購的商品物件儲存到 cookie 中去 */
  20.                     // 從 cookie 中讀取已有的儲存購物車的陣列結構
  21.                     var _products = cookie("products");  
  22.                     if (_products === null// cookie 中不存在 products 名的 cookie
  23.                         _products = [];  
  24.                     else// 存在,則解析 cookie 讀取到的字串為 陣列 結構
  25.                         _products = JSON.parse(_products);  
  26.                     // 將當前選購的商品追加到陣列中儲存
  27.                     _products.push(product);  
  28.                     // 繼續將 _products 陣列內容存回 cookie
  29.                     cookie("products", JSON.stringify(_products), {expires:7});  
  30.                 }  
  31.             }  
html程式碼,css程式碼大家可以自己寫[javascript] view plain copy
  1. <table id="tab">  
  2.         <tr>  
  3.             <td>序號</td>  
  4. 相關推薦

    4關於Cookie原理作用區別以及使用

    1、cookie的作用: 我們在瀏覽器中,經常涉及到資料的交換,比如你登入郵箱,登入一個頁面。我們經常會在此時設定30天內記住我,或者自動登入選項。那麼它們是怎麼記錄資訊的呢,答案就是今天的主角cookie了,Cookie是由HTTP伺服器設定的,儲存在瀏覽器中,但HTTP協議是一種無狀態協議,

    Cookie原理作用區別以及使用

    1、cookie的作用: 我們在瀏覽器中,經常涉及到資料的交換,比如你登入郵箱,登入一個頁面。我們經常會在此時設定30天內記住我,或者自動登入選項。那麼它們是怎麼記錄資訊的呢,答案就是今天的主角cookie了,Cookie是由HTTP伺服器設定的,儲存在瀏覽器中,但HTTP協議是一種無狀態協議,

    關於Cookie原理作用區別以及使用

    1、cookie的作用:我們在瀏覽器中,經常涉及到資料的交換,比如你登入郵箱,登入一個頁面。我們經常會在此時設定30天內記住我,或者自動登入選項。那麼它們是怎麼記錄資訊的呢,答案就是今天的主角cookie了,Cookie是由HTTP伺服器設定的,儲存在瀏覽器中,但HTTP協議

    Java中的集合詳解結合 ArrayListHashSet 的區別以及HashCode的作用

    Java中的集合:      (1)Collection                           List(有序,可重複)             ArrayList         

    描述Cookie和Session的作用區別和各自的應用範圍Session工作原理

    Session用於儲存每個使用者的專用資訊. 每個客戶端使用者訪問時,伺服器都為每個使用者分配一個唯一的會話ID(Session ID) . 她的生存期是使用者持續請求時間再加上一段時間(一般是20分鐘左右).Session中的資訊儲存在Web伺服器內容中,儲存

    php的執行原理cgi對比fastcgi以及php-cgi和php-fpm之間的聯絡區別

    最近專案中本地測試環境遇到了windows環境下的nginx使用file_get_contents/curl訪問php檔案導致的阻塞問題,一直在找解決的方案,這個問題研究了三天終於找到了解決方案,特別因為這個我也對php的執行原理產生了興趣,所以這裡對此進行一定程度的記錄,可

    jquery 對象的 heightinnerHeightouterHeight 的區別以及DOM 元素的 clientHeightoffsetHeightscrollHeightoffsetTopscrollTop

    有關 del core body pla port log path jstl 前言:jquery 對象的 height、innerHeight、outerHeight,還有 DOM 元素的 clientHeight、offsetHeight、scrollHeight、o

    FFE均衡技術的原理作用及特點

    分享圖片 基本 我認 采集 我們 feed 發送信號 因子 不用 說完CTLE之後,大家不用猜都知道會講FFE。的確,FFE(Feed Forward Equalization前向反饋均衡)和前面CTLE有一些相似之處,它們都是模擬的均衡器,同時也是線性的。當然說模擬,線性

    世界座標相機座標影象座標畫素座標的原理關係並用matlab模擬

    世界座標、相機座標、影象座標、畫素座標的原理、關係,並用matlab模擬 照相機是日常生活中最常見的。它能把三維的空間圖片等比例縮小投影在照片上,稱為一個二維影象。 以下我們就講一講原理,並相應的進行matlab模擬。 在學之前,先要了解幾個概念: 什麼是世界座標?

    介面與抽象類區別以及使用場景

    順便做個記錄 介面和抽象類應該是Java語法中最常見的兩個概念 關於兩者,網上也是一搜一噸的對比,總體如下: 1,抽象類的成員可以具有訪問級別 介面的成員全部public級別 2,抽象類可以包含欄位 介面不可以 3,抽象類可以繼承介面 介面不能繼承抽象類

    IIC詳解包括原理過程最後一步步教你實現IIC

    IIC詳解 1、I2C匯流排具有兩根雙向訊號線,一根是資料線SDA,另一根是時鐘線SCL   2、IIC總線上可以掛很多裝置:多個主裝置,多個從裝置(外圍 裝置)。上圖中主裝置是兩個微控制器,剩下的都是從裝置。  3、多主機會產生匯流排裁決問題。當多個主機同時想佔用匯

    簡述TCPUDP區別及各自優缺點

    1、UDP UDP是面向無連線的通訊協議,UDP資料包括目的埠號和源埠號資訊 優點: UDP速度快,操作簡單,要求系統資源較少,由於通訊不需要連線 可實現廣播發送 缺點: UDP傳送資料前並不與對方簡歷連線,對接收到的資料也不傳送確認訊號,傳送端不知道資料是否會正確接收,也不重複傳送,不

    ftracekpatchsystemtap的基本原理聯絡和區別

    1、ftrace Linux當前版本中,功能最強大的除錯、跟蹤手段。其最基本的功能是提供了動態和靜態探測點,用於探測核心中指定位置上的相關資訊。 靜態探測點,是在核心程式碼中呼叫ftrace提供的相應介面實現,稱之為靜態是因為,是在核心程式碼中寫死的,靜態編譯到核心程式碼中

    C++中重定義重寫過載的區別以及隱藏與覆蓋的訪問

    http://blog.csdn.net/yuzhiyuxia/article/details/17392271 在C++中,有以下幾個概念: 重定義(redefine):派生類對基類的成員函式重新定義(即派生類定義了某個函式)該函式的名字與基類中的函式名字一樣。 過載

    stringCtringWstring的區別以及寬位元組與多位元組的運用

    <span style="font-size:18px;"><span class="lnum" style="color:#606060;LINE-HEIGHT: 1.5"> 1: </span><span class="kwrd" style="color

    淺談es的原理機制 IK分詞原理

    1、分散式的架構es都有哪些機制? 1、主備 primary shard 的副本 replica shard primary shard不能和自己的replica shard放在同一個節點上、 2、容錯 使用選舉機制 master node宕機,選舉mast

    驗證碼的原理作用及實現

    驗證碼原理分析及實現一、前言    最近學習實現了驗證碼,首先附圖效果如下:(    簡單說明:        分別提交正確、錯誤的驗證碼及對應效果         本文是圖文結合說明)       

    關於javaScript變數作用域鏈以及this指標的詳解

    1)引子 undefined 先上程式碼: var a = 1; function hehe() { window.alert(a); var a = 2; window.alert(a); } heh

    列表字典元組集合的區別以及各自的使用方法

    區別: 1. 列表 列表、元組、字典、集合的區別是python面試中最常見的一個問題。這個問題雖然很基礎,但確實能反映出面試者的基礎水平。         list是處理一組有序專案的資料結構,即你可以在一個列表中儲存一個序列的專案。列表中的專案。列表中的專案應該包

    python引數的作用區別以及使用方法

    python中引數的型別有位置引數、預設引數、可變引數、關鍵字引數、命名關鍵字引數和一些引數的組合.位置引數: def power(x):     return x*x 其中x就是位置引數。 預設引數:能簡化函式的呼叫,但需要注意幾點: 1、必選引數在前,預設引數在後,否