Sessions und Cookies


Bevor wir zu den Datenbanken (MySQL) und deren Behandlung kommen denke ich sollte man den Einsatz von Sessions und Cookies kennen. Diese bieten neben den Datenbanken auch die Möglichkeit Daten komfortabel über einen gewissen Zeitraum zu speichern. Der große Unterschied zu Datenbankanwendungen ist, dass Datenbanken sicher für größere Speichermengen gedacht sind, die nicht nach einer gewissen Zeit „verfallen“ sollen. Sessions und Cookies werden eingesetzt um bestimmte Daten die man während der Surfer auf der Homepage ist temporär zu sichern – also für einen gewissen Zeitraum.

Unterschied Session und Cookie

 

SESSION: COOKIE:
Lebensdauer: Bis der Browser geschlossen wird, oder bis man es per Befehl zerstört. Bis das Cookie abläuft. Man kann zeitlich festlegen wann dies sein soll, oder es löschen indem man die Gültigkeit in die Vergangenheit datiert und überschreibt.
Speicherort: Auf dem Server. Beim Surfer auf der Festplatte.
Vorteile: Nicht so leicht manipulierbar, da es auf dem Server abgelegt wird und nicht beim Surfer. Es ist nur kurzfristig gültig (Sicherheit). Der User kann auch beim erneuten Besuch eingeloggt sein, ohne die Daten erneut eingeben zu müssen.

 

Sessions/Cookies von fremden Homepages auslesen

Es ist nicht möglich von einer anderen Homepage die Sessions zu lesen, da diese wie oben beschrieben Serverseitig gespeichert werden. Jetzt werdet Ihr denken: „Ok, aber Cookies liegen ja beim Surfer, die kann man bestimmt auslesen“. Nein !

Man kann keine Cookies auslesen, die nicht von der eigenen Seite stammen. Man kann nur die Cookies auslesen, die auch für die eigene Domain beim Surfer gespeichert wurden.

TIP: Genau das kann Probleme bei „Weiterleitungs URLs“ machen, die eigentlich andere Internetadressen in einem Frame darstellen. Es gibt tausende von Anbietern, die kostenlose Domains anbieten, die Weiterleitungen sind. Man registriert sich also umsonst eine kostenlose Weiterleitung, damit die Internetadresse in der Browserzeile schöner aussieht. Der geladene Seiteninhalt ist aber von einer anderen Adresse wie oben angezeigt wird, da der Anbieter der Weiterleitungen den neuen Inhalt in Frames lädt. Speichert man jetzt einen Cookie beim User, kann es passieren dass das Cookie gültig für die Adresse der Weiterleitung ist und nicht für die wirkliche eigene Adresse, auf der die Homepage wirklich ist. Will man nun Cookies auslesen, die man selbst gespeichert hat verbietet dies die Standardsicherheitseinstellung des Internetexplorers und man kann es nicht auslesen (Auslesen von Drittanbietercookies).

Dies sei als Tip angemerkt, wenn man Probleme mit Cookies hat und andere Seiteninhalte in Frames von anderen Internetadressen anzeigen lässt ! Dann sollte man sich darauf besinnen, dass das Problem genau dadran liegt. Aber in den heutigen Zeiten sollte jeder der ein bischen mit dem Web rumspielt, 1-2 Euro für eine Domain übrig haben.

Sessions oder $_SESSION

Wenn ich Sessions benutze, dann entstehen diese in dem Moment, wo der Surfer das erste mal mit seinem Browser meine Homepage betritt. Ich kann nun fortlaufend Daten in der Session speichern. Dem Surfer wird praktisch eine „Nummer“ zugewiesen, die sogenannte Session ID (man liest auch oft von SID). Diese Session bleibt dann solange erhalten wie er den Browser geöffnet hat. Macht er den Browser zu und öffnet einen neuen, dann erhält er beim Betreten der Seite wieder eine neue Session ID.

Wie starte ich eine Session ?

Hierfür benötigen wir den session_start(); Befehl:

<?php
session_start();
?>

Jetzt gibt es ein Array. Arrays haben wir schon in dem Kapitel „Arrays“ behandelt. Das Array heisst $_SESSION. In diesem Array können wir sämtliche Informationen speichern die wir möchten und sie bleiben die ganze Zeit erhalten, bis der Surfer den Browser schliesst. Es gibt Server, da werden die Sessions in der Adresszeile vom Browser immer mit angezeigt und es gibt auch welche wo man diese nicht explizit sieht (je nach Servereinstellung). Da Sessions serverseitig gespeichert werden, könnte jemand wenn er die Internetadresse mit der Session hat theoretisch damit unheil anrichten (mit Ihrem Useraccount eingeloggt sein, oder ähnliches).

Jetzt speichern wir ein paar Daten in der $_SESSION:

<?php
session_start();
$_SESSION[„tier“] = „Hund“;
$_SESSION[„farbe“] = „Schwarz“;
?>

Damit die Daten während der gesamten Laufzeit, bei jedem erneuten Seitenaufruf für meine PHP Skripte zur Verfügung stehen muss ich immer zuerst SESSION_START(); am Anfang meines Skriptes machen und das BEVOR AUCH NUR 1 ZEICHEN AN DEN BROWSER GESCHICKT WIRD ! Schreibt man auch nur einen Buchstaben bevor man den Befehl gemacht hat, dann bekommt man Fehlermeldungen. Dies ist wichtig zu beachten. Häufig treten solche Fehler auf, wenn man unbeabsichtigt beim Start des PHP Codes oder am Ende ein Leerzeichen am Ende der Zeile hat oder einfach ein Return gedrückt hat. Auf den ersten Blick sieht man die Ausgabe nicht , aber sie ist da und verursacht Fehler (vor dem <?php oder nach dem ?>).

Will man manuell eine Session zerstören, da der User sich zum Beispiel ausgeloggt hat kann man die Session auch mit SESSION_DESTROY(); zerstören.

Cookies oder $_COOKIES

Cookies speichern Daten genauso wie eine Session. Ein Cookie wird jedoch beim Surfer auf der Festplatte gespeichert und nicht auf dem Server. Man kann dem Cookie auch sagen wie lange es existieren darf, bevor es ungültig wird. Wenn man ein Cookie erstellt gibt man ihm eine Lebensdauer mit. Cookies setzen tut man mit dem Befehl setcookie();. Wenn nach dem Setzen des Cookies dann die nächste Seite geladen wird , stehen die Cookieeinträge in $_COOKIES zur Verfügung.

Ein Beispiel:

<?php
$meinwert = "Hallo Welt";
setcookie(„Test“, $meinwert);
setcookie(„Test“, $meinwert, time()+3600); # 1 Stunde gültig
?>

Dieses Cookie ist nun eine Stunde gültig (3600 Sekunden). Den Inhalt des Cookies kann man nun beim Laden der nächsten! Seite kontrollieren und ausgeben:

<?php
echo $_COOKIE["Test"];
?>

Cookies löschen:

Will ich dieses Cookie nun wieder löschen, dann gibt es keinen expliziten Befehl um dies zu tun. Man muss praktisch wieder genau den gleichen Cookie setzen und die Gültigkeit des Cookies in die Vergangenheit legen.

<?php
setcookie("Test", "", time() - 3600);
?>

Hier haben wir die Gültigkeit auf vor! einer Stunde gesetzt – es ist also ungültig und ist somit praktisch gelöscht !

Häufiger Fehler: wenn man keine echte Domain hat und sich einer Weiterleitung bedient, dann kann es zu Problemen kommen. Es gibt ja Möglichkeiten zum Beispiel mit einer Frame Weiterleitung eine Domain oben in der Adresszeile zu lassen, die ja eigentlich nicht die wirkliche Adresse ist. United-Domains und andere Provider hatten in der Vergangenheit alle diese Möglichkeit für ihre Kunden. Setzt man nun ein Cookie kann es zu problemen kommen, weil das Cookie praktisch fuer eine fremde Domain gesetzt wird und man darf als Skript ja nur die Cookies auslesen, die für die eigene Domain sind – dies gibt Konflikte und dann funktionieren die Cookies nicht so wie man es von Ihnen erwartet, was aber auch logisch ist. Ihr Skript denkt es liegt auf „web1.server1.de“ und oben in der Adresszeile steht für den Surfer dank Frame Weiterleitung „www.abc.de“, worauf dann auch die Cookies gespeichert werden. Alleine die Standardeinstellung vom Internetexplorer steht schon hoch genug, um das Auslesen dieser Cookies dann zu verhindern.