問題があり、解決できません。たぶん、私はそれを難しすぎたり複雑にしすぎたり、間違った方向に進んで意味のないことを考えたりしているのかもしれません。以下は何が起こるかの説明です。(たとえば、ブラウザまたは他のページを同時に要求するページで開いた複数のタブ。)
Webアプリケーションが3つのリクエストを同時に受信し、新しいユーザーセッションを作成する必要がある状況があります。このセッションは、ユーザーがログインしたときに通知、XSRFトークン、およびログイン情報を保存するために使用されます。アプリケーションはスレッドを使用してリクエストを処理します(Bottle.pyの下のCherryPy)。
3つのスレッド(または場合によってはプロセスまたは複数のアプリケーションインスタンス)が3つのリクエストの処理を開始します。彼らはCookieをチェックし、セッションは存在せず、CookieとRedisに保存される新しい一意のトークンを作成します。これはすべて同時に発生し、3つのトークンはすべて一意であるため、セッションが別のスレッドによってすでに作成されているかどうかはわかりません。
これらの未使用のセッションは最終的に期限切れになりますが、適切ではありません。これは、クライアントが同時にNリクエストを実行し、新しいセッションを作成する必要があるたびに、N-1セッションは役に立たないことを意味します。
IPアドレスなど、クライアントの識別に使用できるプロパティがある場合は、はるかに簡単ですが、この場合、IPアドレスを使用するのは安全ではありません。このプロパティを使用して、セッションをRedisにアトミックに保存でき、他のリクエストはそのセッションを取得するだけです。