2016-10-13 25 views
0

根據某些Django書籍和在線代碼,當需要用一些上下文變量(例如,在服務器端)重定向時,某些值作爲會話變量被傳遞。 request.session['fruit'] = 'apple'Django:即使使用多個服務器,request.session也是穩定的?

但我不知道它真的效果很好,即使我的用戶多臺服務器。(讓我們把每個服務器爲A,B,C)

在這種情況下,用戶的請求可以是RANDOMLY發送到其中的一個服務器。 例如,第一個請求被髮送到A服務器,下一個請求被髮送到B服務器,第三個請求再次到達A服務器。

所以,我只是認爲會話數據(request.session)可能會因爲這種隨機性而丟失或混亂。

我對不對?或由於會話是基於用戶的Cookie會話ID並保存在數據庫中的服務器端數據,所以我不必擔心它?

謝謝:)

回答

0

這取決於您使用的是哪個會話後端。數據庫通常是集中式的,因此如果您使用數據庫後端,哪個服務器處理請求並不重要。

緩存可能在服務器本地。如果您想使用緩存或緩存數據庫後端,則需要考慮這一點。高速緩存的數據庫後端使用直寫式高速緩存:如果高速緩存爲空或寫入新數據,則只能從數據庫中檢索數據。如果更改會話,其他服務器的本地緩存中可能會有過時的數據。

因此,如果您使用緩存或緩存數據庫後端,則需要有一個集中式緩存存儲,以便可以保存會話。

+0

我正在使用''django.contrib.sessions.middleware.SessionMiddleware'',這意味着我不必擔心會話會搞砸嗎? – user3595632

+0

@ user3595632無論您使用的是會話後端,您都需要中間件。重要的是你的['SESSION_ENGINE'](https://docs.djangoproject.com/en/1.10/ref/settings/#session-engine)設置,但是這個默認是使用數據庫後端。所以如果你沒有改變默認值(並且你使用的是集中式數據庫),那麼你就沒有什麼可擔心的。 – knbk

相關問題