1

問題があり、解決できません。たぶん、私はそれを難し​​すぎたり複雑にしすぎたり、間違った方向に進んで意味のないことを考えたりしているのかもしれません。以下は何が起こるかの説明です。(たとえば、ブラウザまたは他のページを同時に要求するページで開いた複数のタブ。)

Webアプリケーションが3つのリクエストを同時に受信し、新しいユーザーセッションを作成する必要がある状況があります。このセッションは、ユーザーがログインしたときに通知、XSRFトークン、およびログイン情報を保存するために使用されます。アプリケーションはスレッドを使用してリクエストを処理します(Bottle.pyの下のCherryPy)。

3つのスレッド(または場合によってはプロセスまたは複数のアプリケーションインスタンス)が3つのリクエストの処理を開始します。彼らはCookieをチェックし、セッションは存在せず、CookieとRedisに保存される新しい一意のトークンを作成します。これはすべて同時に発生し、3つのトークンはすべて一意であるため、セッションが別のスレッドによってすでに作成されているかどうかはわかりません。

これらの未使用のセッションは最終的に期限切れになりますが、適切ではありません。これは、クライアントが同時にNリクエストを実行し、新しいセッションを作成する必要があるたびに、N-1セッションは役に立たないことを意味します。

IPアドレスなど、クライアントの識別に使用できるプロパティがある場合は、はるかに簡単ですが、この場合、IPアドレスを使用するのは安全ではありません。このプロパティを使用して、セッションをRedisにアトミックに保存でき、他のリクエストはそのセッションを取得するだけです。

4

1 に答える 1

0

これがブラウザ経由であり、Cookie を使用している場合、これはまったく問題になりません。Cookie は、私が知る限り、最後に設定されたセッション値になります。使用しているクライアントが Cookie を使用しない場合は、もちろん、接続ごとに新しいセッションが開かれます。

于 2012-11-21T14:48:33.610 に答える