首頁  >  文章  >  後端開發  >  詳解使同一個server上不同port的django應用可在同一個瀏覽器上打開

詳解使同一個server上不同port的django應用可在同一個瀏覽器上打開

高洛峰
高洛峰原創
2017-03-08 10:06:041249瀏覽

如果我們有兩個django應用site1和site2同時跑在同一個server的不同端口,同時我們在同一個瀏覽器的不同tab登入。那麼這時就出出現這種情況,當我們登入site2時就會將site1上登入的用戶踢下來。

為什麼會出現這種情況呢?這跟django的session框架有關,這裡做一個簡單介紹:當我們第一次訪問一個django網站時,django會產生一個session來保存當前會話的一些資訊。同時會產生一個雜湊值session_key並產生一個cookie傳送給客戶端,這個cookie的名字根據setting中SESSION_COOKIE_NAME設置,預設為「sessionid」(劃重點)。這樣下次請示session_key就會跟著cookie送到server。 server根據session_key查找對應session對象,取得目前會話的信息,當然也包含登入資訊。

所以上面的情況真相只有一個(柯南推眼鏡臉):

  1. 我們登入site1是得到一個叫sessionid的cookie,裡面儲存session_key1。

  2. 當我們登入site2時會更新那個叫sessionid的cookie,現在它的值為session_key2(瀏覽器儲存cookies是基於ip而不是端口,所以會更新同一個名字的cookie)。

  3. 所以現在用新的session_key訪問site1時就會拿不到原來的登入訊息,需要我們重新登入。

那麼要怎麼解決呢,了解上面機制後,只需要在setting中設定SESSION_COOKIE_NAME即可。例如可以在site2中設定SESSION_COOKIE_NAME = ‘site2’,site1中用預設。當然也可同時設定site1和site2。

 更多詳解讓同一個server上不同port的django應用可在同一個瀏覽器上開啟相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn