19
使用會話時,Flask需要一個密鑰。在我見過的每個例子中,密鑰都以某種方式生成,然後存儲在源代碼或配置文件中。爲什麼Flask每次啓動時都不會生成密鑰?
永久存儲它的原因是什麼?爲什麼不在應用程序啓動時簡單生成它?
app.secret_key = os.urandom(50)
使用會話時,Flask需要一個密鑰。在我見過的每個例子中,密鑰都以某種方式生成,然後存儲在源代碼或配置文件中。爲什麼Flask每次啓動時都不會生成密鑰?
永久存儲它的原因是什麼?爲什麼不在應用程序啓動時簡單生成它?
app.secret_key = os.urandom(50)
祕密密鑰用於簽署會話cookie。如果您必須重新啓動應用程序並重新生成密鑰,則所有現有會話都將失效。這可能不是你想要的(或者至少,不是關於無效會話的正確方法)。類似的情況可以用於任何其他依賴於密鑰的事件,例如由其危險產生的令牌提供重置密碼URL(例如)。
標準做法是將一些一次性密鑰提交到回購站(以便有一些用於開發機器),然後在部署時將密鑰設置在本地配置中。這樣,密鑰不會泄漏,不需要重新生成。
還有一種情況是運行依賴於應用上下文的輔助系統,例如Celery運行後臺任務,或者多個負載平衡的應用程序實例。如果應用程序的每個正在運行的實例具有不同的設置,則在某些情況下可能無法正確工作。
什麼是重新啓動應用程序的有效情況(除了崩潰,這本身就是一個問題)?難道它不會永遠運行嗎? – 2014-12-04 06:18:39
@MainMa好吧,除非您第一次推出無錯誤,功能完整的代碼,否則您可能需要在某個時候部署新版本。 – davidism 2014-12-04 06:20:59