Recent Changes - Search:

Hauptmenue (edit)

Php /

SessionHandling

<< PasswortGenerator | PhpSchnipsel | SpamStopper >>

Inhaltsverzeichnis:


Ab wann lohnt sich der Einsatz von Sessions?

Eigentlich immer, wenn benutzerbezogene Daten, über mehrere Seiten aufrufe hinweg, mitgeschleppt werden sollen:

  1. Viele Login systeme basieren auf Sessions in Verbindung mit MySQL
  2. Mehrseitige Formulare sollen verarbeitet werden

Vorbedingungen für den Umgang mit Sessions

Bei der Sessionverwaltung hat sich im Laufe der Jahre viel verändert. In diesem Tutorial wird davon ausgegangen, daß mit einer PHP Version 4.3 oder größer gearbeitet wird.

  • session_is_registered
  • session_register
  • session_unregister

Alle drei sind veraltet und sollten nicht mehr verwendet werden, weil sie nur mit "register_globals=On" funktionieren. Spätestens PHP6 macht damit endgültig Schluss.
Auch dein Provider wird umstellen!

Doku: PHP Session Referenz <<<-- lesen


Jetzt erstmal das versprochene Kochrezept:

Wenn wir Sessions nutzen wollen, gehört an den Anfang der Datei unbedingt session_start(). Erst danach erhalten wir Zugriff auf die gespeicherten Session-Daten. Auch werden dann unsere Daten automatisch am Ende des Scriptes auf dem Server gespeichert.

Datei1:

// Eine Session Variable anlegen und mit Daten füllen
session_start();
$_SESSION['test']  = 1234;

Datei2:

session_start();
// Eine Session Variable auslesen
echo $_SESSION['test'];

Datei3:

// Prüfen ob unsere Session Variable gesetzt ist:
session_start();
if (isset($_SESSION['test'])) echo 'Ja ist gesetzt!';

Datei4:

// Eine Session Variable löschen:
session_start();
unset($_SESSION['test']);

Datei5:

// Anzeige der Session-ID:
session_start();
echo 'session_id: '.session_id().'<br>';

Datei6:

// Um eine Session zu resetten(ausloggen) reicht im prinzip:
session_start();
$_SESSION = array();

Noch ein wenig konsequenter ist das Beispiel in der: session_destroy() Doku


Datei7:

// Um eine Session nur zu starten, wenn noch keine gestartet wurde:
if('' == session_id()) session_start();

Bei Problemchen

Doku: PHP Session Referenz <<<-- lesen
Beim debuggen sollte Folgendes immer am Anfang der Problem-Datei stehen:

// Debug Meldungen einschalten
error_reporting(E_ALL);
ini_set('display_errors', TRUE);

// und dann erst
session_start;

Es ist hilfreich sich, beim debuggen, die Session ID anzeigen zu lassen. Datei5 zeigt wie es gemacht werden kann.

Ein kleines Testprogramm: sessiontest.php


Die Variable "test" wird nicht übergeben.

Huch, keine Fehlermeldung und die Session-ID wechselt bei jedem Aufruf ?

Mögliche Ursache:
Der Browser unterstützt keine Cookies und die Einstellungen in der php.ini verhindern die SID Übergabe.


Fehler: "Cannot send session cache limiter" und "Cannot send session cookie"

Häufigste Ursache:

Gemeine Falle:
Mancher Editor klebt, im Unicode Modus, eine BOM an den Anfang des Scriptes. Diese "Byte Order Mark" ist leider nicht in jedem Editor sichtbar.

Ein Hexeditor kann ungemein hilfreich sein, um diesen Fehler zu finden.


Ich will, daß meine Sessions auch ohne Cookies funktionieren!

Wahlweise:

  1. php.ini Einstellungen ändern
  2. .htaccess oder httpd.conf Datei mit den "richtigen" Einstellungen (php_flag und php_value) versehen
  3. mit ini_set() einstellen
  4. output_add_rewrite_var()
  5. händisch die Konstante "SID" an die Links anhängen, notwendig bei z.B. Location Headern

Wenn der Provider die Konfiguration unterbindet, dürfte Weg 4 das Optimum sein!
Weg4:

Und Zack, wenn kein Cookie gesetzt, dann wird die Session ID automatisch an alle relativen Links angehangen und als Hidden-Field in Formularen eingefügt.


Ein paar Worte zur Sicherheit

Wird die SID in der URL transportiert, kann sie versehndlich per E-Mail oder in Foren publiziert werden und dann können völlig Fremde die begonnene Session weiterführen. Also nach Möglichkeit, die Übergabe per Cookie erzwingen.

Sehr gut: Verwende HTTPS bzw. SSL !!
Manche schwören auf:
Nach dem Einloggen oder gar bei jedem Request session_regenerate_id()

http://de.wikipedia.org/wiki/Session_Hijacking
http://de.wikipedia.org/wiki/Session_Fixation
http://www.acros.si/papers/session_fixation.pdf


Links zu diesem Thema:
Zum dritten mal: http://www.php.net/manual/de/refs.basic.session.php damit du es wirklich nicht übersiehst
http://aktuell.de.selfhtml.org/artikel/php/loginsystem/index.htm
http://www.php-einfach.de/einf_php_sessions.php
http://www.develnet.org/26.html
http://www.php-faq.de/ch/ch-version4_session.html
http://www.netcode.net/tutorials/php_mysql/introduction_to_sessions.php

<< PasswortGenerator | PhpSchnipsel | SpamStopper >>

Edit - History - Print - Recent Changes - Search
Page last modified on April 23, 2008, at 05:35 PM