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