【node】會話管理,cookie-parser 和 express-session

nodejs 和 express 都已經摺騰很久了, 各類 demo 也作了很多。其中最關鍵的固然是各類中間件啦,須要什麼 npm 安裝一下,方便快捷。可是要真正作一個網站,必然繞不開登陸註冊,也就是 cookie,session ,中間件是cookie-parser,express-sessionhtml

cookie-parser

cookie-parser 在用 express 生成器構建項目時自動安裝的,它的做用就是設置,獲取和刪除 cookie。express-session 依賴於它。node

1. 引入

var cookieParser = require('cookie-parser');    #引入模塊
app.use(cookieParser());        #掛載中間件,能夠理解爲實例化

這兩行代碼默認在app.js中寫好了,表示如今能夠直接使用 cookie 了。express

2. 建立cookie

res.cookie(name, value [, options]);

namecookie 名,valuecookie 值,能夠是 json 對象或字符串。options 是選項,詳細請閱這裏,經常使用選項有:npm

{
    'maxAge': 90000,    # 有效時長,即90000毫秒後過時,String
    'signed': false     # 默認爲false,表示是否簽名,Boolean
}

建立 cookie 會在 http 響應頭中添加Set-Cookie,從而在瀏覽器中設置 cookiejson

3. 獲取cookie

var cookies = req.cookies      # 獲取cookie集合
var value = req.cookies.key    # 獲取名稱爲key的cookie的值

4. 刪除cookie

res.clearCookie(name [, options])

namecookie 名,options 與建立 cookie 時所傳一致api

5. 簽名

上文所寫 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的值

提示:使用簽名時這三處必須一塊兒修改,只改一處是無效的!安全

6. 栗子

// 設置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

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 的有效時長。

1. 建立session

# 建立一個session
req.session.key = value

# 建立多個session
req.session = {
    key1: value1,
    key2: value2
}

2. 獲取session

var session = req.session      # 獲取session集合
var value = req.session.key    # 獲取名稱爲key的session的值

3. 銷燬session

req.session.destroy()      # 清空全部session
req.session.key.destroy()    # 銷燬名稱爲key的session的值

簡單操做,僅止於此

相關文章
相關標籤/搜索