express中操作cookie和session
一、操作cookie
1、設置cookie(給客戶端設置‘cookie’):
直接使用res.cookie('', '', {})
2、獲取cookie(需藉助第三方中間件):
* 安裝: npm i cookie-parser
* 引入:const cookieParser = require('cookie-parser')
* 使用: app.use(cookieParser)
3、返回給客戶端一個cookie:
* res.cookie('username', 'cookieId', {maxAge: 1000 * 60 * 60})
備註:
1.cookie是以:key-value的形式存在的,前兩個參數分別爲:key、value
2.maxAge用於配置cookie有效期(單位:毫秒)
3.如果不傳入maxAge配置對象,則爲會話cookie,隨着瀏覽器的關閉cookie自動會消失
4.如果傳入maxAge,且maxAge不爲0,則cookie爲持久化cookie,即使用戶關閉瀏覽器,cookie也不會消失,直到過了有效期
4、接收客戶端傳遞過來的cookie:
* req.cookie.xxx:獲取cookie上xxx屬性對應的值。
* 備註:cookie-parser中間件會自動把客戶端發送過來的cookie解析到request對象上
二、操作session(cookie配合session)
1、下載安裝:npm i express-session --save 用於express中操作session
2、下載安裝:npm i connect-mongo --save 用於將session寫入數據庫 (session持久化)
3、引入express-session模塊:
* const session = require("express-session")
4、引入connect-mongo模塊
* const MongoStore = require("connect-mongo")(session)
5、編寫全局配置對象:
app.use(session({
name: 'useId', // 設置cookie的name,默認值是:connect.sid
secret: 'userValue', // 參與加密的字符串(又稱簽名)
saveUninitialized: false, // 是否在存儲內容之前創建會話
reserve: true, // 是否在每次請求時,強制重新保存session,即使他們沒有變化
store: new MongoStore({
url: 'mongodb://localhost:27017/cookies_container',
touchAfter: 24 * 3600 // 修改頻率(例: // 在24小時內只更新一次)
}),
cookie: {
httpOnly: true, // 開啓後前端無法通過JS操作cookie
maxAge: 1000 * 30 // 設置cookie的過期時間
}
}));
6、向session中添加一個xxxx,值爲yyy:req.session.xxxx = yyyy
7、獲取session上的xxx屬性:const {xxxx} = req.session