私が構築しているアプリケーションでは、セッションストレージメディアとしてRedisを使用しています。
先日、テスターの1人が、ログアウトしてすぐに保護されたURIにアクセスしようとしたとき(ログアウトから約1秒以内)、古いセッションデータがまだ使用されていることに気付きました。
階段状:
- ユーザーはアカウントAとしてログインします。
- ユーザーがログアウトします。
- ユーザーはすぐに保護されたURIにアクセスします。
- ユーザーはアカウントAとして再度ログインします。
私は何が起こっているのかこれだと思います:
- ユーザーがログアウトすると、アプリケーションはユーザーのセッションをクリアし、空のセッションをRedisに送信して保存します。
- 変更が「行われる」前に、ユーザーは別のリソース(たとえば、サインインフォームまたは保護されたURI)にアクセスします。
- アプリケーションはRedisにセッションを要求しますが、これにはまだログインしているセッション値が含まれています。
- アプリケーションは更新されたセッションをRedisに送り返し、ログアウトしたセッションを上書きします。
これは正しい診断ですか?Redisは、を受け入れてSET
から実際に保存された値を更新するまでに遅延がありますか?または、アプリケーションロジックで何かを調査する必要がありますか?