Express Sessions

如何使用sessions在請求之間識別用戶 預設情況下,Express請求是依序處理的,並且無法將請求相互關聯起來。除非使用某種機制來實現,否則無法知道該請求是否來自先前已執行請求的客戶端。 這就是sessions的作用。 一旦實施,您的API或網站的每個用戶將被分配一個唯一的session,這使您可以存儲用戶狀態。 我們將使用由Express團隊維護的express-session模塊。 您可以使用以下命令進行安裝 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' })) 完成後,應用程序路由的所有請求都將使用sessions。 secret是唯一的必需參數,但還有很多其他可用的參數。它應該是您應用程序的隨機唯一字符串。 session附加到請求上,所以您可以在這裡使用req.session進行訪問: app.get('/', (req, res, next) => { // req.session } 此對 象可用於從session獲取數據,並用於設置數據: req.session.name = 'Flavio' console.log(req.session.name) // 'Flavio' 在存儲時,此數據序列化為JSON,因此您可以安全使用嵌套對象。 您可以使用sessions將數據傳遞給稍後執行的中間件,或者在後續的請求中檢索數據。 會話數據存儲在哪裡?這取決於您如何設置express-session模塊。 它可以將會話數據存儲在 內存,不適用於生產環境 如MySQL或Mongo之類的 數據庫 如Redis或Memcached之類的 內存緩存 在 https://github.com/expressjs/session 中有一個支持各種不同兼容緩存存儲的第三方包列表 所有解決方案都將會話ID存儲在cookie中,並在服務器端保存數據。客戶端將在cookie中接收會話ID,並將其與每個HTTP請求一起發送。 我們將在服務器端引用這個會話ID,以將其與本地存儲的數據關聯起來。 內存是默認選項,您無需進行特殊設置,但它只適用於開發目的。 最佳選擇是像Redis這樣的內存緩存,您需要設置它自己的基礎架構。 在Express中管理會話的另一個流行包是cookie-session,它的一大不同之處在於它將數據客戶端存儲在cookie中。我不建議這樣做,因為將數據存儲在cookie中意味著它存儲在客戶端,並在用戶發出的每個請求中來回傳輸。它的大小也受限制,因為它只能存儲4KB的數據。 Cookie還需要進行安全配置,但默認情況下它們並未進行安全配置,因為安全Cookie僅適用於HTTPS站點,如果有代理,則需要對其進行配置。