express框架中cookie的使用

cookie的工作原理

http是一種無狀態協議,設計HTTP最初的目的是爲了提供一種發佈和接收HTML頁面的方法。那個時候沒有動態頁面技術,只有純粹的靜態HTML頁面,因此根本不需要協議能保持狀態;

cookie是在RFC2109(已廢棄,被RFC2965取代)裏初次被描述的,每個客戶端最多保持三百個cookie,每個域名下最多20個Cookie(實際上一般瀏覽器現在都比這個多,如Firefox是50個),而每個cookie的大小爲最多4K,不過不同的瀏覽器都有各自的實現。對於cookie的使用,最重要的就是要控制cookie的大小,不要放入無用的信息,也不要放入過多信息。

無論使用何種服務端技術,只要發送回的HTTP響應中包含如下形式的頭,則視爲服務器要求設置一個cookie:

Set-cookie:name=name;expires=date;path=path;domain=domain

支持cookie的瀏覽器都會對此作出反應,即創建cookie文件並保存(也可能是內存cookie),用戶以後在每次發出請求時,瀏覽器都要判斷當前所有的cookie中有沒有沒失效(根據expires屬性判斷)並且匹配了path屬性的cookie信息,如果有的話,會以下面的形式加入到請求頭中發回服務端:

Cookie: name="zj"; Path="/linkage"

服務端的動態腳本會對其進行分析,並做出相應的處理,當然也可以選擇直接忽略。

這裏牽扯到一個規範(或協議)與實現的問題,簡單來講就是規範規定了做成什麼樣子,那麼實現就必須依據規範來做,這樣才能互相兼容,但是各個實現所使用的方式卻不受約束,也可以在實現了規範的基礎上超出規範,這就稱之爲擴展了。無論哪種瀏覽器,只要想提供cookie的功能,那就必須依照相應的RFC規範來實現。所以這裏服務器只管發Set-cookie頭域,這也是HTTP協議無狀態性的一種體現。

需要注意的是,出於安全性的考慮,cookie可以被瀏覽器禁用。

//轉載於http://www.cnblogs.com/chenchenluo/p/4197181.html

express直接提供了api,只需要在需要使用的地方調用如下api即可

function(req, res, next){
    ...
    res.cookie(name, value [, options]);
    ...
}

express就會將其填入Response Header中的Set-Cookie,達到在瀏覽器中設置cookie的作用。

name: 類型爲String
value: 類型爲String和Object,如果是Object會在cookie.serialize()之前自動調用JSON.stringify對其進行處理
Option: 類型爲對象,可使用的屬性如下
domain:cookie在什麼域名下有效,類型爲String,。默認爲網站域名
expires: cookie過期時間,類型爲Date。如果沒有設置或者設置爲0,那麼該cookie只在這個這個session有效,即關閉瀏覽器後,這個cookie會被瀏覽器刪除。
httpOnly: 只能被web server訪問,類型Boolean,禁止客戶端JavaScript的訪問,禁止後不能使用document.cookie。
maxAge: 實現expires的功能,設置cookie過期的時間,類型爲String,指明從現在開始,多少毫秒以後,cookie到期。
path: cookie在什麼路徑下有效,默認爲’/’,類型爲String
secure:只能被HTTPS使用,類型Boolean,默認爲false
signed:使用簽名,類型Boolean,默認爲false。express會使用req.secret來完成簽名,需要cookie-parser配合使用

下面一段代碼用於設置cookie:

var express=require('express');
var cookie=require('cookie-parser'); 
var app=express();


app.use(cookie());

app.get('/',function(req,res){

   if(req.cookies.user){
       res.send('歡迎在次登錄')
   }
    else{
       res.cookie('user',1,{ expires: new Date(Date.now() + 100), httpOnly: true });
       res.send('歡迎新用戶登錄')
   }
});

app.listen(8888);

這裏寫圖片描述

我們注意到在第一次登錄時,在請求的response頭部會出現set-cookie。對應的在server.js中我們手動設置的cookie。

再打開瀏覽器查看此時的瀏覽器cookie。

這裏寫圖片描述

再次刷新頁面。

這裏寫圖片描述

在請求的請求頭中出現cookie,此時頁面出現歡迎在次登錄
這樣一個簡單的服務端設置cookie就搞定了。

發佈了38 篇原創文章 · 獲贊 12 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章