Unser Projekt enthält einige Daten in einem einzigen $_SESSION['app']
. Es gibt ein "Haupt" -Objekt, das ungefähr 10 öffentliche Instanzen anderer Objekte enthält, die innerhalb des Codes verwendet werden können. Tatsächlich wird nur einer von ihnen regelmäßig verwendet ($_SESSION['app']->login->getuserId()
) und zwei von ihnen werden nur 4-5 mal insgesamt verwendet.
Da wir neben unserem Projekt eine RESTful-API erstellt haben, möchten wir einige der Funktionen unserer Projekte innerhalb der API verwenden und müssen daher die Sitzung, die in vielen Methoden in fast allen Objekten verwendet wird, loswerden Auf lange Sicht wollen wir komplett auf die REST-konforme Kommunikation zwischen Client und Server umsteigen.
Da wir ein kleines Team sind, können wir es uns nicht leisten, den gesamten Code auf einmal zu refaktorieren, aber wir müssen Schritt für Schritt vorgehen, ohne den Code in der Zwischenzeit zu brechen.
Mein erster Versuch ist die Umwandlung der Session-Objekt in ein Singleton wie folgt aus:
class Main {
private static $main = null;
public static function getInstance() {
self::$main = $_SESSION['app'] ?? self::$main ?? new Main();
return self::$main;
}
public function __construct {
// ...
}
}
Auf diese Weise seit einiger Zeit konnten wir die Instanziierung von $ _SESSION [ ‚App‘] lassen, wie es ist und später Entfernen Sie die Sitzung vollständig in einem kleinen Arbeitsschritt. Mein Versuch funktioniert soweit, aber es verschiebt nur das konzeptionelle Problem, das ich mit der Klasse Main
habe.
Auch ich habe gelesen, dass die Verwendung des Singleton-Patterns in den meisten Fällen eine schlechte Idee ist und die Argumente für diese Meinung verstehen. In unserem Projekt verwenden wir noch keine Komponententests, aber ich möchte das bald für meinen Code verwenden.
Also, was eine bessere und zuverlässigere Art und Weise unseres $_SESSION
-variable loszuwerden und in einer Art und Weise, wie die userID
Daten handhaben wäre, dass sie von überall her zugegriffen werden konnten, so dass wir am Ende eine RESTful Authentifizierung haben statt einer Sitzung?
Konnte nicht einfach weiter so wie es ist - aber anstatt das Array aus der Sitzung zu füllen, holen Sie, was Sie brauchen, von dem authentifizierten Benutzer (dh mit einem JWT) – JimL