|
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 & 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:
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.
Interessanter Session Workshop: www.MyWebSolution.de
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.
|