如何使用會話識別請求中的用戶
默認情況下,Express請求是順序的,並且任何請求都不能相互鏈接。無法知道此請求是否來自先前已經執行過請求的客戶端。
除非使用某種可行的機制,否則無法識別用戶。
那就是會議。
實施後,將為您的API或網站的每個用戶分配一個唯一的會話,這使您可以存儲用戶狀態。
我們將使用express-session
由Express團隊維護的模塊。
您可以使用安裝
npm install express-session
完成後,您可以在應用程序中使用
const session = require('express-session')
這是一個中間件,所以您安裝在Express中使用
const express = require('express')
const session = require('express-session')
const app = express()
app.use(session({
‘secret’: ‘343ji43j4n3jn4jk3n’
}))
完成此操作後,對應用程序路由的所有請求現在都在使用會話。
secret
是唯一必需的參數,但您可以使用更多的參數。對於您的應用程序,它應該是隨機唯一的字符串。
會話已附加到請求中,因此您可以使用進行訪問req.session
這裡:
app.get('/', (req, res, next) => {
// req.session
}
該對象可用於從會話中獲取數據,也可用於設置數據:
req.session.name = 'Flavio'
console.log(req.session.name) // 'Flavio'
該數據被序列化為JSON格式當存儲時,因此可以安全地使用嵌套對象。
您可以使用會話將數據與稍後執行的中間件進行通信,或在以後的請求中稍後檢索它們。
會話數據存儲在哪裡?這取決於您如何設置express-session
模塊。
它可以將會話數據存儲在
- 記憶,不打算用於生產
- 一種數據庫像MySQL或Mongo
- 一種內存緩存像Redis或Memcached
第3個軟件包的清單很大,它們實現了以下各種兼容緩存存儲https://github.com/expressjs/session
所有解決方案都將會話ID存儲在cookie中,並保留數據在服務器端。客戶端將通過cookie接收會話ID,並將其與每個HTTP請求一起發送。
我們將引用該服務器端將會話ID與本地存儲的數據相關聯。
內存是默認設置,不需要您進行任何特殊設置,這是最簡單的事情,但這僅用於開發目的。
最好的選擇是像Redis這樣的內存緩存,您需要為其設置自己的基礎架構。
另一個在Express中管理會話的流行軟件包是cookie-session
,這有很大的不同:它將客戶端的數據存儲在cookie中。我不建議您這樣做,因為將數據存儲在Cookie中意味著將其存儲在客戶端,並在用戶提出的每個請求中來回發送。它的大小也受到限制,因為它只能存儲4 KB的數據。 Cookies也需要保護,但默認情況下不是安全的,因為HTTPS站點上可以使用安全Cookies,如果有代理,則需要對其進行配置。
免費下載我的Express.js手冊
更多速成教程:
- Express,流行的Node.js框架
- 使用Express檢索GET查詢字符串參數
- 使用express-validator驗證Express中的輸入
- 快遞模板
- 使用Express服務靜態資產
- 使用Express發送JSON響應
- 快速會議
- 使用Express發送回复
- 使用Express發送文件
- 使用Express-Validator清理Express中的輸入
- 在Express中路由
- 具有自簽名證書的Express HTTPS服務器
- Express,請求參數
- 使用Express檢索POST查詢參數
- 使用Express處理重定向
- 快速中間件
- 設置讓我們為Express加密
- 在Express中使用HTTP標頭
- 在Express中處理表格
- 使用Express處理表單中的文件上傳
- 在Express中處理CORS
- 使用Express管理Cookies