Edgar Ehritt: SESSION oder COOKIE?

Beitrag lesen

Hallo AirMax,

Tom hatte sich ja schon dafür ins Zeug gelegt, Cookies als die Wahl des Mittels herauszustellen. Daher will ich nur zwei Sachen anmerken:

Im Gebrauch mit Cookies sollte man immer eine Pfadangabe nutzen, was leider immer wieder falsch gemacht wird. Sie werden sonst völlig sinnlos mit jedem request dem Server angeboten. Das ist zwar weiter nicht tragisch, nur ist es nicht ressourcen-schonend, weil es unnötigen Datenverkehr erzeugt. Bei größer werdenden Projekten kann man so auch Überschneidungen von Cookies vermeiden. Die Pfadangabe ist insoweit ähnlich verschiedener Programmiersprachen namensraumgestaltend. Das bedeutet eben auch, dass man sich beim Gebrauch auch Gedanken über die Strukturierung seines Webprojektes machen sollte, was die Verzeichnisstruktur anbelangt. Darüber hinaus ist für Deine spezielle Aufgabe der Keks tatsächlich nicht für die auszuliefernden Dokumente von Bedeutung sondern für die Wahl der Bilder und sollte auch nur dort gesendet werden. Das hat Konsequenzen für das Konzept der Programmlogik.
 Während man allgemein nur innerhalb der Scripte, die das eigentliche Dokument ausgeben sollen, auf den Cookie prüfen würde und dementsprechend eine URL-Angabe im HTML ändern würde, sollte man serverseitig mittels des Cookies und der URL andere Inhalte (also andere Bilder) ausliefern. Ich schreibe das deswegen so allgemein, weil PHP/Scripte hier nicht die einzige Variante sein muss. Dazu später noch ein Beispiel. Leider hat das Verfahren auch ein Schönheitsfehler, denn entsprechende Zusatzangaben, die mit den den jeweiligen Bildern einhergehen (alt-Attribut im <img>-Element), können dann dynamisch nicht angepasst werden.
 Es sei folgende Verzeichnisstruktur gegeben:

/
  |
  |-css/
  |
  |-js/
  |
  |-bilder/
  |  |
  |  |-0.jpg
  |  |
  |  |-1.jpg
  |  |
  |  |-2.jpg
  |  |
  |  |-.htaccess
  |  |
  |  -img.php   |   -dokument.html

In der dokument.html sollte also die URL zum sich wechselnden Bild hardcodiert werden (z. B. <img src="bilder/img.php" alt="blabla"/>). Die tatsächliche Kontrolle und das Setzen des Cookies obliegt nunmehr der img.php, die nach Auswertung eines der Bilder serviert. Mit der Pfadangabe im Keks werden Cookies nur an Anfragen an /bilder/ gesendet. Weder restliche Scripte, Dokumente, noch andere Verzeichnisse werden mit den Keksen versorgt. Jedoch ist PHP für das einfache Ausgeben von einem entsprechenden Conten-Type-Header, vielleicht noch einer Cache-Angabe und dem Dateninhalt der einzelnen Dateien überdimensioniert. Das kann beispielsweise der Apache mit mod_rewrite ganz alleine und ohne PHP. Der oben angegebenen Verzeichnisstruktur entsprechend sieht die .htaccess dann so aus:

RewriteCond %{HTTP_COOKIE} (name=2|^$)  
RewriteRule ^img.php$      0.jpg       [L,CO=name:0:domainname:10:/bilder/]  
  
RewriteCond %{HTTP_COOKIE} name=0  
RewriteRule ^img.php$      1.jpg       [L,CO=name:1:domainname:10:/bilder/]  
  
RewriteCond %{HTTP_COOKIE} name=1  
RewriteRule ^img.php$      2.jpg       [L,CO=name:2:domainname:10:/bilder/]

Die zweite Sache, die ich noch ansprechen wollte, betrifft Deine spezielle Aufgabenstellung. Da es in Deinem Fall nicht sicherheitsrelevant ist, kann zugunsten 100%er Funktionalität, was Cookies eben nicht bieten können auf Session in der Form gesetzt werden, dass die Session-ID im URL abgelegt wird. Auch für diese Variante ist man nicht auf PHP/Scripte angewiesen.

Gruß aus Berlin!
eddi