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

如果我們有兩個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。

 

這裏是老瘦家的兒子,如需轉載請聲明,我替老瘦感謝你

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章