/

Express Sessions

Express Sessions

如何使用sessions在請求之間識別用戶

預設情況下,Express請求是依序處理的,並且無法將請求相互關聯起來。除非使用某種機制來實現,否則無法知道該請求是否來自先前已執行請求的客戶端。

這就是sessions的作用。

一旦實施,您的API或網站的每個用戶將被分配一個唯一的session,這使您可以存儲用戶狀態。

我們將使用由Express團隊維護的express-session模塊。

您可以使用以下命令進行安裝

1
npm install express-session

一旦安裝完成,您可以在應用程序中實例化它

1
const session = require('express-session')

這是一個中間件,所以您需要在Express中安裝

1
2
3
4
5
6
7
const express = require('express')
const session = require('express-session')

const app = express()
app.use(session({
'secret': '343ji43j4n3jn4jk3n'
}))

完成後,應用程序路由的所有請求都將使用sessions。

secret是唯一的必需參數,但還有很多其他可用的參數。它應該是您應用程序的隨機唯一字符串。

session附加到請求上,所以您可以在這裡使用req.session進行訪問:

1
2
3
app.get('/', (req, res, next) => {
// req.session
}

此對 象可用於從session獲取數據,並用於設置數據:

1
2
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站點,如果有代理,則需要對其進行配置。

tags: [“Express”, “sessions”, “middleware”, “cookies”, “server-side storage”]