Skip to content

Daten_frei_in_der_Session_speichern

Marlon Kern edited this page Mar 23, 2016 · 4 revisions

Bei umfangreichen Anwendungen ist der soeben beschriebene Ansatz mit Parametern nicht günstig. Komplexe Anwendungen können verschiedene Seiten- und Boxmodule besitzen, die Informationen miteinander teilen. Jedes Modul der Anwendung muss die Parameternamen kennen und die Parameter initialisieren, was schnell unübersichtlich werden würde. Es kann daher sinnvoll sein, Daten explizit in der Session abzulegen. Um Konflikte zu verhindern und den Zugriff auf $_SESSION zu abstrahieren, stellt base_object zwei Funktionen zur Verfügung: base_object::setSessionValue() und base_object::getSessionValue().

Im folgenden Beispiel wird eine Session-Speicherklasse vorgestellt, die drei Methoden implementiert:

Beispiel einer Session-Speicherklasse

...
function initialize() {}
function setUserLoggedIn($userId) {}
function getUserLoggedIn($userId) {}
...

Methode zum Initialisieren der Sessiondaten

Die Methode initialize() liest die Session-Daten beim Initialisieren der Klasse in die lokale Variable $this->sessionParams. Bei einem Zugriff auf die Session-Daten müssen also nicht jedes Mal die kompletten Session-Daten ausgelesen werden. Die Daten stehen anderen Methoden für die gesamte Lebenzeit der Klasse im Attribut $this->sessionParams zur Verfügung:

Sessionparameternamen für Klasse initialisieren

...
function initialize() {
  $this->_sessionParamName = get_class() . '_user_options';
  $this->sessionParams = $this->getSessionValue($this->_sessionParamName);
}
...

Damit es keine Überschneidungen gibt, können Sie $sessionParamName aus dem Klassennamen und einem Identifier zusammensetzen.

Methode für den Schreibzugriff auf Sessiondaten

Die Methode setUserLoggedIn() schreibt die modifizierten Session-Daten zuerst in das lokale array $this->sessionParams. Anschließend werden die Sessiondaten mit der Methode $this->setSessionValue() in die Session geschrieben: Wert in der Session ändern

...
function setUserLoggedIn($userId) {
  $this->sessionParams['logged_in'] = 1;
  $this->setSessionValue($this->_sessionParamName, $this->sessionParams);
}
...

Methode für den Lesezugriff auf Sessiondaten

Die Methode getUserLoggedIn() überprüft, ob der gesuchte Wert in der lokalen Variablen $this->sessionParams enthalten ist. Ist dies der Fall, können Sie ihn mit return an die aufrufende Instanz zurückgeben:

Wert aus der Session auslesen

...
function getUserLoggedIn($userId) {
  if (isset($this->sessionParams['logged_in'])) {
    return $this->sessionParams['logged_in'];
  }
}
...

Die Methode benutzt also nicht $this->getSessionValue(), um die Sessiondaten zuerst in ein lokales Array zu lesen, sondern greift auf die Daten im Klassenattribut $this->sessionParams zu.

Clone this wiki locally