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可以被瀏覽器禁用。
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);