next up previous contents index
Next: SQL-Schnittstelle Up: Sessions Previous: Das Session-Konzept von PHP

Das Session-Konzept der Workflow-Anwendung

Das eben beschriebene Verhalten von PHP 4 beim Abarbeiten der externen Variablen wird von der Workflow-Anwendung ausgenutzt. Deswegen muss in der PHP-Konfigurationsdatei 'php_ini' sichergestellt sein, dass die Seesion-Variablen immer als letztes verarbeitet werden. Die Funktionen der Workflow-Anwendung legen für jede Variable, die vom Benutzer an die Anwendung geschickt werden kann, eine Session-Variable mit einem Standardwert an. Das heißt, dass der Wert jeder Variablen aus einem Link oder einem Formular (also aus 'HTTP_GET_VARS' oder 'HTTP_POST_VARS') zunächst durch den Wert der Session-Variable überschrieben wird. Erst durch den Aufruf der Funktionen 'session_update_local($name, $tiefe=0, $erweitern=0)' oder 'session_update_global($name, $tiefe=0, $erweitern=0)' wird der Wert aus dem Link oder dem Formular restauriert. Dadurch kann sichergestellt werden, dass eine Session-Variable nicht aus Versehen (oder böswillig) überschrieben wird. Jede sicherheitsrelevante Variable sollte man deshalb als Session-Variable registrieren.

Die genannten Funktionen bieten für Arrays darüber hinaus die Möglichkeit anzugeben, auf welcher Schachtelungstiefe die Ersetzung der Werte vorgenommen werden soll. Dabei bedeutet '0', dass das ganze Array ersetzt wird, '2' beispielsweise, dass die Values der 2. Dimension des Arrays ersetzt werden. Außerdem kann festgelegt werden, ob die Werte aus dem Link bzw. dem Formular das Array erweitern dürfen oder nicht. Die Funktion 'session_update_global' überschreibt den Wert der Sitzungsvariablen mit dem Wert aus dem Link oder Formular und löscht den Wert aus 'HTTP_GET_VARS' oder 'HTTP_POST_VARS'. Die Funktion 'session_update_local' überschreibt den Wert der Session-Variable nicht, sondern liefert nur eine entsprechende Rückgabe. Beide Funktionen überprüfen außerdem, ob für eine Variable eine bestimmte Funktion definiert ist. Der Name einer solchen Funktion muss mit 'session_handler_' beginnen und anschließend den Namen der Variablen enthalten. Wenn eine solche Funktion existiert, wird sie vor dem Überschreiben der Session-Variable aufgerufen, wobei ihr der Wert aus dem Link oder Formular als Referenz übergeben wird. Auf diese Weise können die Werte bearbeitet und überprüft werden oder es können andere Routinen aufgerufen werden, die bei bestimmten Variablen notwendig sind.

Die eben beschriebenen Funktionen werden von der Library 'lib-session.inc.php' bereit gestellt. Die Library enthält außerdem die Funktionen 'session_begin()' und 'session_my_register(var_liste)', die statt der PHP-Funktionen 'session_start' und 'session_register' in der Anwendung verwendet werden. Beim Aufruf von 'session_begin' wird die Konstante 'USE_SESSION' auf '1' gesetzt. Diese Konstante bestimmt, ob überhaupt das PHP-Session-Konzept verwendet werden soll. Ist die Konstante nicht gesetzt, d. h. wurde die Funktion nicht aufgerufen, gehen die anderen Funktion in 'lib-session.inc.php' und 'lib-sessionsupport.inc.php' davon aus, dass keine Sessions verwendet werden sollen und verhalten sich dementsprechend. Dies betrifft vor allem die Funktion 'session_my_register'. Ist 'USE_SESSION' gesetzt, ruft sie nur die PHP-eigene Funktion 'session_register' auf. Im anderen Fall speichert sie die Namen aller ankommenden Variablen in einem Array. Beim Aufbau einer HTML-Seite mit Hilfe der Funktionen aus der Bibliothek 'lib-sessionsupport.inc.php', wird dann versucht, die in diesem Array registrierten Variablen in die Links oder Formulare einzubauen. Dies gelingt allerdings nur, wenn die Anzahl der Variablen nicht zu groß wird. Die Funktionen, die die Variablen bei Bedarf einbauen, heißen 'session_link', 'session_link_with_image', 'session_form_head' und 'session_form' und Verhalten sich alle wie die Pendants in 'lib-html.inc.php' (siehe Abschnitt 4.6). Diese Funktionen stellen außerdem sicher, dass die Konstante SID bei Bedarf eingebaut wird und ist deshalb den entsprechenden Funktionen in 'lib-html.inc.php' vorzuziehen, sofern Session-Unterstützung erwünscht ist.

Wer Speicherplatz schonen und vielleicht bessere Performance-Werte erzielen will, kann außerdem die Funktion 'session_unregister_on_pagechange' für die in einem Modul verwendeten Session-Variablen verwenden. Dieser Funktion übergibt man eine Liste der Session-Variablen, die bei einem Seitenwechsel, sprich beim Aufruf eines neuen Workflow-Schritts, gelöscht werden sollen.


next up previous contents index
Next: SQL-Schnittstelle Up: Sessions Previous: Das Session-Konzept von PHP
Copyright Munich Network Management Team