1

redis セッション ストアを共有する同じドメイン内の異なるホストでホストされている 2 つの django (同じバージョン、同じセッション ミドルウェア) アプリがあります。

しかし、1 つのアプリにログインしようとすると、2 番目のアプリはセッション データを取得しません。2 つの django アプリが同じホストでホストされている場合、すべて正常に動作します。settings.py で両方のアプリに SESSION_COOKIE_DOMAIN を設定しようとしましたが、これまでのところ成功していません。何が間違っているのか、または私の2つのアプリ間でセッションデータを正常に共有する方法について手掛かりを教えてくれる人はいますか?

以下は、達成したいことの小さなスキームです。

|------------------------|
| | site1.domain.tld
|------------------------|
      | |
      | |
|----------------------------|
| | Redis セッション ストア
|----------------------------|
      | |
      | |
|------------------------|
| | site2.domain.tld
|------------------------|

注: SESSION_COOKIE_DOMAIN は両方のアプリで「.domain.tld」に設定され、SECRET_KEY も同じです。

よろしく、

クレマン。

4

1 に答える 1

1

redisセッションバックエンドの内部の仕組みについては完全にはわからないので、かなり長いショットですcache_keyが、デフォルトSessionStore_get_new_session_keyメソッドとそれが呼び出すメソッドを見ると、サーバーごとに一意のキャッシュキーが計算されているという仮説を立てることができます. .

django のドキュメントには、次のように明示的に記載されています。

[…] サーバー間、または本番環境と開発環境の間でキャッシュ インスタンスを共有すると、あるサーバーでキャッシュされたデータが別のサーバーで使用される可能性があります。

KEY_PREFIXとの設定を確認することをお勧めしKEY_FUNCTIONます。おそらく、両方のサーバー構成で値を明示的に設定すると、目的の効果が得られます。また、redis セッション ストアのソース コードを調べると、キー プレフィックスを処理するかどうか、およびその方法について貴重な洞察が得られる場合があります。

于 2015-05-18T14:50:44.503 に答える