由于无服务器函数本身是无状态和短暂的,无服务器系统通过将状态存储卸载到外部服务来管理会话状态。 当用户与无服务器应用程序交互时,每个函数调用都独立运行,而不会在请求之间保留数据。 为了维护会话状态(例如用户身份验证、偏好设置或临时数据),开发人员必须显式地将其存储在函数运行时之外。 这通常使用数据库、键值存储或客户端机制来完成,以确保状态在多个函数调用之间保持不变。
例如,一种常见的方法是使用数据库或缓存服务,如 Amazon DynamoDB 或 Redis。 当用户登录时,无服务器函数可能会生成一个会话 ID,将用户数据与过期时间一起存储在 DynamoDB 中,并将会话 ID 作为 cookie 发送到客户端。 来自客户端的后续请求包含此 ID,允许函数从数据库中检索会话数据。 或者,开发人员可以使用 JSON Web Tokens (JWT) 将会话数据直接编码到客户端令牌中。 该令牌由服务器签名,发送到客户端,并包含在未来的请求中。 函数可以验证令牌并提取会话数据,而无需查询数据库,从而减少延迟。
但是,这种方法需要权衡。 外部存储会话数据会引入延迟,特别是如果存储未针对低查找时间进行优化。 对于高性能场景,像 Redis 这样的内存缓存优于传统数据库。 安全是另一个问题:客户端令牌必须加密和签名以防止篡改,而数据库存储的会话需要严格的访问控制。 开发人员还必须处理会话过期和清理,通常在数据库或缓存服务中使用生存时间 (TTL) 策略。 通过设计,无服务器将状态管理的复杂性转移到外部系统,需要仔细集成以平衡性能、安全性和可扩展性。