深圳官方網(wǎng)站制作站長工具怎么關(guān)掉
-
express-session 文檔
express-session 一個簡單的express會話中間件 -
使用場景
在一個系統(tǒng)中, 需要維持一個臨時的與登錄態(tài)無關(guān)的會話密鑰
比如登錄系統(tǒng)后, 請求某一個接口, 接口的行為與登錄態(tài)無關(guān), 也就是說任何人對接口的訪問都是一樣的,服務(wù)端不關(guān)心客戶端是誰, 但是為了服務(wù)特定用戶(比如能夠登錄該系統(tǒng)的用戶),又必須有一個密鑰來做驗證,請求密鑰時驗證用戶的登錄狀態(tài),驗證成功, 則發(fā)送密鑰。 用戶拿到密鑰后就可以和服務(wù)端通信, 而通信過程不需要帶上用戶信息, 服務(wù)端也不會關(guān)心用戶信息。 -
使用
node
const session = require('express-session'); app.use(session({secret: 'myscret',resave: false,saveUninitialized: true,name: 'token'}) ); //服務(wù)端設(shè)置會話密鑰,發(fā)送給客戶端加密后的密鑰 //雖然接口叫做login其實和登錄沒有聯(lián)系 router.post('/login', (req, res, next) => {req.session.token = '10086';res.send(200, {msg: 'ok'}); }); //需要會話密鑰驗證的接口 router.post('/request', (req, res, next) => {console.log(req.session);if (req.session.token && req.session.token === '10086') {res.send(200, {msg: 'get'});return;}res.send(200, {msg: 'error reject'}); }); //服務(wù)端銷毀會話密鑰 router.post('/logout', (req, res, next) => {req.session.destroy(() => {res.send({msg: 'logout'});}); });
-
其實這種場景比較少, 大多數(shù)的場景還是需要對用戶的狀態(tài)做出區(qū)分, 而且關(guān)聯(lián)上用戶狀態(tài)也是可以涵蓋這種場景的
-
使用注意, 如果前后端跨域 【注釋一】 你需要注意, 跨域如何設(shè)置cookie(如果你讀過文檔, 你會知道這個中間件是基于cookie實現(xiàn)的)已經(jīng)在node第十一天說過。
這是mdn的文檔描述, 但是你無法在本地跨域的情況下使用使用這個中間件, 因為此中間件對于跨域設(shè)置cookie會忽略掉,即使是 locahost 。從規(guī)范的角度來說這里應(yīng)該是這個中間件的不足之處 -
【注釋一】 這里的跨域準確來說應(yīng)該是至少域名/ip存在不同,而不能僅僅是端口號不同
-
這種會話模式顯然是將憑證維護在服務(wù)端, 與之對應(yīng)的還有另外一種方式, 也就是現(xiàn)在被廣泛運用的token,把憑證維護在客戶端。詳見node 第十九天