Hauptmenü

Untermenü

PHP/MySQL - Sessions - Generelle Tipps

1. Die Abschnitte

2. Die Sache mit der SID

Wenn irgend möglich, solltet ihr auf diese Variante tunlichst verzichten! Denn die Sicherheitsrisiken sind enorm! Nehmen wir dazu einfach mal folgende Situation an. User X hockt in einem Internetcafe und will Online-Banking machen. Also loggt er sich bei Bank Y ein und macht irgendwas. Nun ist aber der Besitzer des Ladens ein ziemlich paranoider Mensch und hat in seinen Browsern die Annahme von Cookies deaktiviert.

User X hat natürlich keine Ahnung davon und weiß eh nicht, um was es geht. Der erledigt sein "Geschäft" und geht dann seiner Wege. So! Jetzt muss das nur ein böser Zeitgenosse beobachtet haben. Der setzt sich dann an denselben Rechner und klaubt sich aus der History-Liste den Link inklusive Session-ID heraus. Und zack, hat er Zugriff auf das Konto von Herrn/Frau X.

3. Was speichern?

Einfach gesagt nur das absolut Notwendigste! Ich habe es leider schon oft genug erlebt, dass unerfahrene "Programmierer" wirklich alles, aber auch alles in Sessions abspeichern. Datenbankverbindungen, komplette Adressen von eingeloggten Besuchern und was weiß ich nicht noch alles. Darum gibt es jetzt ein paar grundsätzliche Tipps meinerseits.

Ein Login-System

Wenn sich ein registrierter Besucher irgendwo einloggt, so wird nur seine eindeutige ID gespeichert. Vielleicht noch sein Benutzername aber mehr nicht! Also nicht seine komplette Adresse und schon gar nicht sei Passwort. Nie, nie, nie das Passwort in eine Session packen.

Verbindungsdaten zur Datenbank

... haben in einer Session nichts zu suchen. Ende aus, Micky Maus.

Daten eines Warenkorbes

Hier legt man die eindeutige ID eines Artikels plus die bestellte Anzahl ab. Also keine Preise oder irgendwelche Rabatte. Die holt man sich bei Bedarf aus der Datenbank. Das erfordert zwar zusätzliche Abfragen, erhöht aber die Sicherheit.

4. Wie speichern

Da man Sessions wie normale Arrays beliebig tief verschachteln kann, sollte man das auch nutzen. Greifen wir dazu mal auf einen Shop mit Login zurück. Wir haben also einen eindeutig zu identifizierenden Besucher und dessen Warenkorb. Da könnte man zum Beispiel das Session-Array so aufbauen.


// Userdaten mit Name und ID
$_SESSION['user']   = array (...);
// Warenkorb mit Artikelnummer und Anzahl
$_SESSION['basket'] = array (...);


So kann zum Beispiel nach einer abgeschlossenen Bestellung den Warenkorb ganz einfach mit unset($_SESSION['basket']); löschen, ohne dass die Benutzerdaten hops gehen oder man sich einen Wolf "unsettet". Ach ja, bei so was ist unset ok.

Niemals

... solltet ihr bei Sessions mit numerischen Indizes arbeiten. Und schon gar nicht mit einem automatisch hoch zählenden. Da kann schon mal eine Verbindung etwas langsam sein, und ein ungeduldiger Besucher haut ständig auf die F5-Taste. Was glaubt ihr, wie dann zum Beispiel ein Warenkorb aussieht, der so organisiert ist?


$_SESSION['basket'] = array();
$_SESSION['basket'][]['produkt_id'] = 12;
$_SESSION['basket'][]['anzahl']     = 5;


Statt dessen

... sollte man zumindest meiner Meinung nach immer mit eindeutigen Indizes arbeiten. bei einem Warenkorb könnte der zum Beispiel so aussehen.


$_SESSION['basket'] = array();
$_SESSION['basket'][$produkt_id] = $anzahl;

5. Fazit

Eigentlich ist das Arbeiten mit Sessions überhaupt kein Problem. Man muss nur auf ein paar Details achten und der Rest kommt im Laufe der Zeit. Das ist dann reine Erfahrungssache. Ich hoffe, dass ihr zumindest die grundsätzlichen Dinge verstanden habt. Der Rest ergibt sich dann.

zurück zum vorherigen Abschnitt