nodejs 和 express 都已經摺騰很久了, 各類 demo 也作了很多。其中最關鍵的固然是各類中間件啦,須要什麼 npm 安裝一下,方便快捷。可是要真正作一個網站,必然繞不開登陸註冊,也就是 cookie,session ,中間件是
cookie-parser
,express-session
html
cookie-parser 在用 express 生成器構建項目時自動安裝的,它的做用就是設置,獲取和刪除 cookie。express-session 依賴於它。node
var cookieParser = require('cookie-parser'); #引入模塊 app.use(cookieParser()); #掛載中間件,能夠理解爲實例化
這兩行代碼默認在app.js
中寫好了,表示如今能夠直接使用 cookie 了。express
res.cookie(name, value [, options]);
name 是 cookie 名,value 是 cookie 值,能夠是 json 對象或字符串。options 是選項,詳細請閱這裏,經常使用選項有:npm
{ 'maxAge': 90000, # 有效時長,即90000毫秒後過時,String 'signed': false # 默認爲false,表示是否簽名,Boolean }
建立 cookie 會在 http 響應頭中添加Set-Cookie
,從而在瀏覽器中設置 cookiejson
var cookies = req.cookies # 獲取cookie集合 var value = req.cookies.key # 獲取名稱爲key的cookie的值
res.clearCookie(name [, options])
name 是 cookie 名,options 與建立 cookie 時所傳一致api
上文所寫 cookie 的各類操做,都是沒有通過簽名的。簽名能夠提升安全性。下面是使用簽名生成 cookie 的方法,大同小異,修改上文便可瀏覽器
app.use(cookieParser('ruidoc')); # 須要傳一個自定義字符串做爲secret
# 建立cookie的options中,必填 signed: true res.cookie(name, value, { 'signed': true });
var cookies = req.signedCookies # 獲取cookie集合 var value = req.signedCookies.key # 獲取名稱爲key的cookie的值
提示:使用簽名時這三處必須一塊兒修改,只改一處是無效的!安全
// 設置cookie名爲user,值爲對象,90000ms過時,無簽名 res.cookie('user', { id: 1, name: 'ruidoc' }, { maxAge: 900000 } ); //獲取設置的cookie var user = req.cookies.user
// 設置cookie名爲admin,值爲對象,無過時時間,有簽名 res.cookie('admin', { 'id': 1 }, { 'signed': true } ); //獲取設置的cookie var admin = req.signedCookies.admin
options 中沒有設置過時時間的話,默認關閉瀏覽器即過時清除cookie
express-session 纔是真正在服務端保存數據的中間件,它須要獨立安裝session
npm install express-session --save
而後在app.js
中引入,在 app.use(cookieParser()) 以後掛載
var session = require('express-session'); app.use(session([options]));
一樣說幾個經常使用的 options
{ 'secret': 'ruidoc', # 簽名,與上文中cookie設置的簽名字符串一致, 'cookie': { 'maxAge': 90000 }, 'name': 'session_id' # 在瀏覽器中生成cookie的名稱key,默認是connect.sid }
由於建立 session 的同時會建立 cookie 來保存 sessionId,因此 options 中的 cookie.maxAge 可看做是 session 的有效時長。
# 建立一個session req.session.key = value # 建立多個session req.session = { key1: value1, key2: value2 }
var session = req.session # 獲取session集合 var value = req.session.key # 獲取名稱爲key的session的值
req.session.destroy() # 清空全部session req.session.key.destroy() # 銷燬名稱爲key的session的值
簡單操做,僅止於此