node.js中COOKIE的使用

node.js中如何向客戶端發送COOKIE呢?
有以下兩個方案:
    1、使用response.writeHead,代碼示例:
    //設置過時時間爲一分鐘 javascript

var today = new Date();
    var time = today.getTime() + 60*1000;
    var time2 = new Date(time);
    var timeObj = time2.toGMTString();
    response.writeHead({
       'Set-Cookie':'myCookie="type=ninja", "language=javascript";path="/";Expires='+timeObj+';httpOnly=true'
    });


    語法以下(具體每一個字段的解釋,請看下文的「options字段含義」):
        Set-Cookie:'
            cookieName=cookieValue;
            [expires=]
            [;domain=]
            [;path=]
            [;secure=]
            [;httpOnly=]
        '
    
    經過查看,COOKIE以下圖所示:

    
    缺點:使用response.writeHead只能發送一次頭部,即只能調用一次,且不能與response.render共存,不然會報錯 php

    2、使用response.cookie,代碼示例以下:
     html

response.cookie('haha', 'name1=value1&name2=value2', {maxAge:10*1000, path:'/', httpOnly:true});


    語法以下:
response.cookie('cookieName', 'name=value[name=value...]',[options]);


    options字段含義:
        一、expires:指定過時時間,以GMT格式表示的時間字符串,如方法一個的「timeObj」。
        二、maxAge:指定過時時間,同expires(expires和maxAge選二者其一設值便可)。和expires不一樣之處在於,maxAge值的單位爲毫秒(見方法二中的maxAge:10*1000,即爲10秒)。maxAge值能夠是正數和負數。正數表示當前COOKIE存活的時間。負數表示當前COOKIE只是隨着瀏覽器存儲在客戶端的內存裏,只要關閉瀏覽器,此COOKIE就立刻消失。默認值爲-1。
        三、domain:指定可訪問COOKIE的主機名。主機名是指同一個域名下的不一樣主機。如:www.google.com和gmail.google.com是在兩個不一樣的主機上,即兩個不一樣的主機名。默認狀況下,一個主機中建立的COOKIE在另外一個主機下是不能被訪問,但能夠經過domain參數來實現對其的控制,即所謂的跨子域。以google爲例,要實現跨主機(跨子域)訪問,寫法以下:domain=.google.com,這樣就實現了全部google.com下的主機均可以訪問此COOKIE。(本機環境上設置此值時,COOKIE沒法查看。    
        四、path:指定可訪問此COOKIE的目錄。如:path=/default  表示當前COOKIE僅能在 default 目錄下使用。默認值爲「/」,即根目錄下的全部目錄皆能夠訪問。
        五、secure:當設爲true時,表示建立的COOKIE會以安全的形式向服務器傳輸,即只能在HTTPS鏈接中被瀏覽器傳遞到服務器端進行會話驗證;如果HTTP鏈接則不會傳遞該信息,因此不會被竊取到COOKIE裏的具體內容。同理,在客戶端,咱們也沒法使用document.cookie找到被設置了secure=true的cookie健值對。secure屬性是防止信息在傳遞的過程當中被監聽捕獲後信息泄漏,httpOnly屬性的目的是防止程序獲取COOKIE後進行攻擊(XSS)。咱們能夠把secure=true當作比httpOnly=true是更嚴格的訪問控制。 
        六、httpOnly:是微軟對COOKIE作的擴展。若是在COOKIE中設置了「httpOnly」屬性,則經過程序(JS腳本、applet等)將沒法讀取到COOKIE信息,防止XSS攻擊產生。 

    經過查看,COOKIE以下圖所示:
    
java

    參考資料:
        一、http://nodejs.org/api/http.html#http_response_setheader_name_value
        二、http://www.cnblogs.com/rubylouvre/archive/2012/08/19/2645644.html
        三、http://expressjs.com/api.html#res.cookie
        四、http://mao.li/node/node-js-handle-cookie/

node

相關文章
相關標籤/搜索