2 つの Django アプリケーション site1 と site2 が同じサーバーの異なるポートで同時に実行されており、同じブラウザの異なるタブから同時にログインしているとします。次に、サイト 2 にログインすると、サイト 1 にログインしていたユーザーが追い出されます。
なぜこのようなことが起こるのでしょうか?これは Django のセッション フレームワークに関連しています。簡単に説明します。Django Web サイトに初めてアクセスすると、Django は現在のセッションに関する情報を保存するためにセッションを生成します。同時に、ハッシュ値 session_key が生成され、Cookie が生成されてクライアントに送信されます。この Cookie の名前は、設定の SESSION_COOKIE_NAME に従って設定されます (強調を追加)。このようにして、次回は session_key が cookie とともにサーバーに送信されます。サーバーは、session_key に基づいて対応するセッション オブジェクトを検索し、ログイン情報を含む現在のセッションの情報を取得します。
つまり、上記の状況 (コナンがメガネで顔を押す) の真実は 1 つだけです:
site1 にログインすると、session_key1 を保存する sessionid という Cookie を取得します。
site2 にログインすると、sessionid という Cookie が更新され、その値は session_key2 になります (ブラウザーはポートではなく IP に基づいて Cookie を保存するため、同じ名前の Cookie が更新されます)。
そのため、新しい session_key を使用して site1 にアクセスすると、元のログイン情報を取得できなくなり、再度ログインする必要があります。
では、上記の仕組みを理解したら、設定でSESSION_COOKIE_NAMEを設定するだけです。たとえば、site2 で SESSION_COOKIE_NAME = 'site2' と設定し、site1 でデフォルトを使用できます。もちろん、site1とsite2を同時に設定することも可能です。
同じサーバー上の異なるポートを持つ Django アプリケーションを同じブラウザーで開くことができるようにする方法の詳細については、PHP 中国語 Web サイトの関連記事に注目してください。