快速会议

如何使用会话识别请求中的用户

默认情况下,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手册


更多速成教程: