2016-10-13 3 views
0

Djangoの書籍とオンラインコードによれば、いくつかの値はいくつかのコンテキスト変数で(サーバー側で)リダイレクトする必要があるときにセッション変数として渡されます。 request.session['fruit'] = 'apple'Django:複数のサーバーを使用していてもrequest.sessionは安定していますか?

しかし、私はそれは本当に場合でも、私のユーザーの複数のサーバうまく機能だろう。(のは、A、B、Cのように各サーバを呼びましょう)

この場合、ユーザの要求は、これらのいずれかに送らRANDOMLYすることができサーバー。 たとえば、最初の要求はAサーバーに送信され、次の要求はBサーバーに送信され、3番目の要求はサーバーに再度送られます。

この乱雑さのために、セッションデータ(request.session)が失われたり乱雑になったりする可能性があります。

私は正しいですか?またはセッションはのユーザーのクッキーセッションIDに基づいてサーバー側のデータであり、データベースに保存されているので、私はそれについて心配する必要はありませんか?

ありがとう:)

答えて

0

これは、使用しているセッションバックエンドによって異なります。データベースは通常集中管理されるため、データベースのバックエンドを使用している場合は、どのサーバーが要求を処理するかは関係ありません。

キャッシュはサーバーにローカルである可能性があります。キャッシュまたはキャッシュされたdbバックエンドを使用する場合は、これを考慮する必要があります。キャッシュされたdbバックエンドは、ライトスルーキャッシュを使用します。つまり、キャッシュが空の場合や新しいデータが書き込まれた場合にのみ、データがデータベースから取得されます。セッションを変更すると、他のサーバーのローカルキャッシュに失効したデータが存在する可能性があります。

キャッシュまたはキャッシュされたdbバックエンドを使用している場合は、セッションを保存できる集中キャッシュストアが必要です。

+0

私は '' django.contrib.sessions.middleware.SessionMiddleware''を使用しています。これは、セッションについて心配する必要はありません。 – user3595632

+0

@ user3595632使用しているセッションバックエンドに関係なくミドルウェアが必要です。重要なことは、あなたの['SESSION_ENGINE'](https://docs.djangoproject.com/en/1.10/ref/settings/#session-engine)設定ですが、これはデフォルトでデータベースのバックエンドを使うことになります。したがって、デフォルトを変更しておらず、集中データベースを使用している場合は、何も心配する必要はありません。 – knbk

関連する問題