Sitzungs-Cookies werden mit einem zufällig generierten geheimen Schlüssel verschlüsselt, der standardmäßig in Redis gespeichert wird. Redis-Daten sind nicht in einem Backup enthalten, sodass beim Wiederherstellen der Site auf einem neuen Server ein neuer geheimer Schlüssel generiert wird.
Du kannst den geheimen Schlüssel manuell über eine Umgebungsvariable DISCOURSE_SECRET_KEY_BASE in deiner app.yml-Datei festlegen. Um Sitzungen zu erhalten, könntest du beispielsweise so vorgehen:
-
Gib auf deinem bestehenden Server die Konsole ein und finde den geheimen Schlüssel in Redis:
pry(main)> GlobalSetting.safe_secret_key_base => "5fb9dc98be368599e0a..." -
Füge
DISCOURSE_SECRET_KEY_BASEim Abschnittenv:deiner app.yml auf dem alten Server hinzu, verwende den in Schritt (1) gefundenen Wert und baue die App neu. Theoretisch sollte Discourse nun den Wert aus der app.yml verwenden und die Benutzersitzungen bleiben erhalten. Du kannst überprüfen, ob die Umgebungsvariable verwendet wird, indem du folgenden Befehl ausführst:GlobalSetting.secret_key_base -
Stelle sicher, dass die app.yml auf dem neuen Server denselben
SECRET_KEY_BASEenthält. Beim Wiederherstellen des Backups sollten die Benutzersitzungen erhalten bleiben.
Ich habe diesen Ablauf nicht getestet. Wenn du ihn für ein Produktionsforum verwenden möchtest, teste ihn bitte zuerst!
Nebenbemerkung: Du solltest den geheimen Schlüssel auf keinen Fall zwischen mehreren Discourse-Instanzen teilen. Wer den geheimen Schlüssel besitzt, kann Sitzungs-Cookies auf einer Site entschlüsseln und manipulieren, was schwerwiegende Sicherheitsfolgen haben kann.