1

私が構築しているアプリケーションでは、セッションストレージメディアとしてRedisを使用しています。

先日、テスターの1人が、ログアウトしてすぐに保護されたURIにアクセスしようとしたとき(ログアウトから約1秒以内)、古いセッションデータがまだ使用されていることに気付きました。

階段状:

  1. ユーザーはアカウントAとしてログインします。
  2. ユーザーがログアウトします。
  3. ユーザーはすぐに保護されたURIにアクセスします。
  4. ユーザーはアカウントAとして再度ログインします。

私は何が起こっているのかこれだと思います:

  1. ユーザーがログアウトすると、アプリケーションはユーザーのセッションをクリアし、空のセッションをRedisに送信して保存します。
  2. 変更が「行われる」前に、ユーザーは別のリソース(たとえば、サインインフォームまたは保護されたURI)にアクセスします。
  3. アプリケーションはRedisにセッションを要求しますが、これにはまだログインしているセッション値が含まれています。
  4. アプリケーションは更新されたセッションをRedisに送り返し、ログアウトしたセッションを上書きします。

これは正しい診断ですか?Redisは、を受け入れてSETから実際に保存された値を更新するまでに遅延がありますか?または、アプリケーションロジックで何かを調査する必要がありますか?

4

1 に答える 1

2

SETコマンドの実行に遅延はありません。redis-serverが正常に戻り、クライアントライブラリが成功を報告した場合、redisがデータを書き込んだことを確認できます。

アプリケーションスタックを確認することをお勧めします。おそらく、セッションハンドラーはセッションを非同期的に無効にしていますか?

于 2012-10-25T15:25:59.890 に答える