Eine Weihnachtsfeier jagt die nächste, auf der einen Seite ist es immer sehr nett, auf der anderen Seite gerät man schnell in Streß. Naja, heute ein wenig verspätet nun das Türchen 19. Tim hat Euch gestern im Türchen 18 gezeigt, wie man mit TypoScript schicke GMENUs erzeugt. Heute möchte ich wieder ein wenig PHP Code zeigen.

Diesmal geht es um die Benutzung der Session in TYPO3. In der Regel genügt nur eine Zeile Code um einen Wert in die Session zu schreiben oder wieder heraus zu holen. Schauen wir uns erstmal an, wie man etwas in die Session schreibt:

  1. $GLOBALS["TSFE"]->fe_user->setKey("ses", "tx_myext", $data);

Die Funktion setKey() erwartet drei Parameter:

  1. Type: Dieser kann "ses" oder "user" sein.
  2. Key: Eindeutiger Ident für eine Session Variable
  3. Data: Die Daten die gespeichert werden sollen.

Die beiden Typen "ses" und "user" unterscheiden sich wesentlich. Während der Typ "ses" nur temporär die Daten speichert, also genau so lange, wie die Session besteht (Session-Cookie), ist es mit dem Key "user" möglich, die Daten auch über mehrere Sessions hinweg zu speichern, wobei diese an den FE-User gekoppelt werden.

Der Key sollte so gewählt werden, dass man nicht in Konflikt mit anderen Extensions kommt. Am besten benutzt man seinen Extension-Key dafür.

Die Daten die man speichern will kann jede beliebige PHP Variable sein, sogar komplette Objekte kann man ablegen.

So, nun wollen wir uns den Wert mal wieder raus holen, auch dies geht sehr schnell und einfach:

  1. $data = $GLOBALS["TSFE"]->fe_user->getKey("ses", "tx_myext");

Die Methode getKey erwartet nur zwei Parameter, die Bedeutung ist die gleiche wie bei setKey().

Das Leben kann so einfach sein, wenn es nicht ab und an diese kleinen fiesen Sonderfälle gibt ;)

Nehmen wir mal an, man erzeugt ein PDF oder eine AJAX-Antwort, dann gibt man das PDF aus und steigt mit einem exit() oder die() aus. In diesen Fällen, reicht ein einfacher Aufruf von setKey() nicht aus. Denn TYPO3 kann dann die Daten nicht automatisch speichern. Aber hier schafft der folgende Code Abhilfe:

  1. $GLOBALS["TSFE"]->fe_user->setKey("ses", "tx_myext", $data);
  2. $GLOBALS["TSFE"]->fe_user->storeSessionData();

Mit storeSessionData() sorgen wir dafür, dass TYPO3 umgehend die Werte speichert. Sehr häufig wird gerade auf die letzte Zeile verzichtet, was in der Regel auch funktioniert, jedoch nur so lange, wie kein Fehler auftritt oder das Script vorzeitig beendet wird.

Fröhliches Session-Handling Euch allen :)