Python 为什么不在每次烧瓶启动时生成密钥?

Python 为什么不在每次烧瓶启动时生成密钥?,python,session,flask,session-cookies,Python,Session,Flask,Session Cookies,使用会话时,Flask需要密钥。在我看到的每个示例中,密钥都是以某种方式生成的,然后存储在源代码或配置文件中 永久存储它的原因是什么?为什么不在应用程序启动时简单地生成它呢 app.secret_key = os.urandom(50) 密钥用于对会话cookie进行签名。如果必须重新启动应用程序并重新生成密钥,则所有现有会话都将无效。这可能不是您想要的(或者至少不是使会话无效的正确方法)。类似的情况也适用于任何依赖于密钥的其他情况,例如由其生成的令牌,以提供重置密码URL(例如) 应用程序可

使用会话时,Flask需要密钥。在我看到的每个示例中,密钥都是以某种方式生成的,然后存储在源代码或配置文件中

永久存储它的原因是什么?为什么不在应用程序启动时简单地生成它呢

app.secret_key = os.urandom(50)

密钥用于对会话cookie进行签名。如果必须重新启动应用程序并重新生成密钥,则所有现有会话都将无效。这可能不是您想要的(或者至少不是使会话无效的正确方法)。类似的情况也适用于任何依赖于密钥的其他情况,例如由其生成的令牌,以提供重置密码URL(例如)

应用程序可能需要重新启动,因为崩溃,或者因为服务器重新启动,或者因为您正在推动错误修复或新功能,或者因为您正在使用的服务器生成新进程,等等。因此,您不能指望服务器永远处于运行状态

标准做法是将一些一次性密钥提交给repo(这样就可以为dev机器提供一些东西),然后在部署时在本地配置中设置密钥。这样,密钥就不会泄漏,也不需要重新生成

还存在运行依赖于应用程序上下文的辅助系统的情况,例如用于运行后台任务的芹菜,或应用程序的多个负载平衡实例。如果应用程序的每个正在运行的实例具有不同的设置,则在某些情况下,它们可能无法正常工作