快速會議

如何使用會話識別請求中的用戶

默認情況下,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手冊


更多速成教程: