2015-10-13 56 views
4

考慮下面這個簡單的燒瓶應用中的一些問題約瓶會話

  1. 一旦「enter_string」端點被訪問和用戶分配一個字符串session["string"],存儲的字符串在哪裏?它在服務器的內存還是用戶的?
  2. 默認情況下,會話在瀏覽器退出時過期。有沒有簡單的方法讓其他事件觸發會話過期,例如關閉窗口但不一定是瀏覽器?
  3. 默認情況下,會話是否會超時或保留,直到瀏覽器退出,無論需要多長時間?

回答

7

Flask中的會話可以用不同的方式實現。默認實現基於安全cookie(具有防止篡改的加密簽名的cookie)。以下是針對此實現的問題的答案:

  1. 該字符串將存儲在客戶端cookie中。每次瀏覽器向服務器發送請求時,cookie都會隨之發送。

  2. 客戶端可以通過使用Javascript刪除cookie來銷燬會話。 (會話cookie的默認名稱是session)。服務器可以通過從中刪除所有項目來刪除會話。

  3. 在默認實現中,cookie的到期日期將來會設置31天。這可以通過PERMANENT_SESSION_LIFETIME配置設置進行更改。

正如我上面提到的,Flask支持第三方會話處理程序,所以上述答案可能不適用於其他實現。特別是,有一些處理程序實現了將會話數據存儲在服務器而不是客戶端的服務器端會話(例如Flask-Session或Flask-KVSession)。

+0

當談到這裏的會話時,我將展示自己的綠色,但我在會話的印象之下,它通常是一個散列,它被存儲爲本地cookie,然後從服務器獲取......我不知道會話在本地存儲整個數據...... –

+2

@JoranBeasley您描述的實現被廣泛使用,但這並不是Flask默認執行的操作。如果您使用服務器端擴展,如[Flask-Session](http://pythonhosted.org/Flask-Session/),則Flask會將會話散列存儲在cookie中,就像您說的那樣。 – Miguel

+0

它總是很好學習新東西:) –