会话 Cookie 使用随机生成的密钥进行加密,默认情况下该密钥存储在 Redis 中。Redis 数据不包含在备份中,因此当您将站点恢复到新服务器时,会重新生成新的密钥。
您可以在 app.yml 文件中通过环境变量 DISCOURSE_SECRET_KEY_BASE 手动设置密钥。您可以尝试以下方法来保留会话:
-
在现有服务器上,进入控制台并从 Redis 中查找密钥
pry(main)> GlobalSetting.safe_secret_key_base => "5fb9dc98be368599e0a..." -
在旧服务器的 app.yml 文件的
env:部分添加DISCOURSE_SECRET_KEY_BASE,使用您在步骤 (1) 中找到的值,然后重建应用。理论上,如果一切顺利,Discourse 现在应使用 app.yml 中的值,用户会话将得以保留。您可以通过运行以下命令检查环境变量是否生效:GlobalSetting.secret_key_base -
确保新服务器上的 app.yml 具有相同的
SECRET_KEY_BASE。当您恢复备份时,用户会话应得以保留。
我尚未测试此流程,因此如果您计划将其用于生产环境的论坛,请务必先进行测试!
附注:您绝对不应在多个 Discourse 实例之间共享密钥。拥有密钥将允许某人解密并修改其在站点上的会话 Cookie,可能导致严重的安全问题。