对于我正在构建的应用程序,我们使用 Redis 作为会话存储介质。
前几天,我们的一位测试人员注意到,当他注销并立即尝试访问受保护的 URI 时(在注销后大约 1 秒内),他的旧会话数据仍在使用中。
阶梯式:
- 用户以账户 A 登录。
- 用户注销。
- 用户立即访问受保护的 URI。
- 用户再次以账户 A 登录。
我认为正在发生的事情是这样的:
- 用户注销,因此应用程序清除用户的会话并将空会话发送到 Redis 进行存储。
- 在更改“生效”之前,用户访问不同的资源(例如,登录表单或受保护的 URI)。
- 应用程序从 Redis 请求会话,它仍然包含登录的会话值。
- 应用程序将更新后的会话发送回 Redis,覆盖注销的会话。
这是一个正确的诊断吗?SET
Redis 在接受 a和实际更新存储值之间是否有延迟?还是我应该调查我的应用程序逻辑中的某些内容?