Cookie mit dynamischen Namen
Christian Leipnitz
- php
Hallo zusammen,
ich biete eine Linkliste an und möchte nun mal versuchen, dem User anzuzeigen, wann er welchen Link zuletzt angeklickt hat.
Mit _einem_ Link ist das auch kein Problem: die entsprechenden Informationen werden im Cookie gespeichert und ich kann sie auch korrekt auslesen.
Anfangs benutzte ich noch einen festen Cookie-Namen, allerdings wurde so bei Klick auf einen anderen Link das Cookie (natürlich) überschrieben - die Infos wurden also logischerweise immer nur für einen Link gespeichert.
Folglich mußte der Name des Cookies dynamisch sein - anbieten würde sich wahrscheinlich die angeklickte URL. Auch das habe ich hingekriegt: im Cookie werden jetzt alle angeklickten Links gespeichert.
Jetzt stellt sich allerdings das Problem des Cookie-Auslesens: da die Infos aus dem Cookie nur passend zum Link auf der Website angezeigt werden sollen ("Link 1 zuletzt am 20.04.03 besucht, Link 2 zuletzt am 21.05.03 besucht, Link 3 noch gar nicht besucht"), müßte doch die Abfrage zum Auslesen und Anzeigen ungefähr so lauten: "Wenn URL im Cookie mit der URL auf Seite übereinstimmt, dann zeige Infos an.".
Aber wie durchsucht man ein Cookie nach der passenden URL? Muss ich eventuell mit Arrays arbeiten? Ist es grundsätzlich überhaupt möglich?
Ich schlafe nicht und esse kaum - aber eine Lösung ist nicht in Sicht ... hat jemand Hinweis oder Tipps?
Besten Dank im Voraus,
Hallo, Christian,
schau mal hier unter "Cookies with Multiple Values" ...
http://www.worldzone.net/computers/kjkoruth/lesson8c.html
Grüße,
Sebastian
Hallo Sebastian,
»»
schau mal hier unter "Cookies with Multiple Values" ...
http://www.worldzone.net/computers/kjkoruth/lesson8c.html
»»
Vielen Dank für den Link.
So wie es dort aufgeführt wird, habe ich es probiert. Die Daten werden auch gespeichert und das Auslesen funktioniert auch. Allerdings werden nur Daten für einen Link gespeichert bzw. das Cookie immer wieder überschrieben. Aber wahrscheinlich liegt da noch ein Denkfehler meinerseits vor, oder?
Gruß,
Allerdings werden nur Daten für einen Link gespeichert bzw. das Cookie immer wieder überschrieben. Aber wahrscheinlich liegt da noch ein Denkfehler meinerseits vor, oder?
stark anzunehmen.
was machst du denn, wenn du den wert für einen weiteren link abspeicherst?
bedenke, dass du auch alle anderen, älteren werte zuerst aus dem vorhandenen cookie auslesen muss, und beim schreiben des wertes für den neuen link die alten werte ebenfalls wieder mit übergeben musst - so etwas wie den 'anfüge'-modus beim schreiben von dateien gibt's bei cookies schliesslich nicht, du musst beim setzen jedes mal _alle_ daten übergeben, die im cookie gespeichert werden sollen.
Hallo Christian,
Folglich mußte der Name des Cookies dynamisch sein - anbieten würde sich wahrscheinlich die angeklickte URL. Auch das habe ich hingekriegt: im Cookie werden jetzt alle angeklickten Links gespeichert.
Warum definierst du nicht ein Array von Werten im Cookie? Jedesmal ein neues Cookie ist eine miese Idee, da max. 20 Cookies pro Domain gesetzt werden können.
Viele Grüße
Antje
Hallo Antje,
»»
Warum definierst du nicht ein Array von Werten im Cookie? Jedesmal ein neues Cookie ist eine miese Idee, da max. 20 Cookies pro Domain gesetzt werden können.
»»
Also so, wie es auch auf der Website die Sebastian verlinkt hat, beschrieben wird http://www.worldzone.net/computers/kjkoruth/lesson8c.html?
Das habe ich probiert - es werden leider nur die Daten für einen Link gespeichert. Ich werde mich damit noch mal ausführlich beschäftigen, denn wahrscheinlich mache ich irgendwo einen Fehler.
Gruß,
Hallo Christian,
Also so, wie es auch auf der Website die Sebastian verlinkt hat, beschrieben wird http://www.worldzone.net/computers/kjkoruth/lesson8c.html?
Das habe ich probiert - es werden leider nur die Daten für einen Link gespeichert. Ich werde mich damit noch mal ausführlich beschäftigen, denn wahrscheinlich mache ich irgendwo einen Fehler.
es kommt natürlich auf die Größe der zuspeichernden Daten an. Der bequeme Weg könnte so gehen:
if (!isset($_COOKIE["TestCookie"])) {
$value=array(1,2,3);
setcookie ("TestCookie", serialize($value), time()+3600);
} else {
$value=unserialize($_COOKIE["TestCookie"]);
var_dump($value);
}
serialize erzeugt aus einer Variablen einen speicherbaren String. Im Beispiel wird diese Zeichenkette a:3:{i:0;i:1;i:1;i:2;i:2;i:3;} im Cookie gespeichert. unserialize() erzeugt wieder eine Variable daraus.
Vorteil, du brauchst dich um nichts weiter kümmern und hast nur ein Cookie.
Nachteil: du brauchst mehr Zeichen, als wenn du mehrere Cookies setzt oder eine eigene serialize-Methode schreibst.
Beachte, mehr als 4 KB darf ein Cookie (konkret gesagt die Summe aller Cookies einer Domain) nicht groß sein. Das Beispiel erzeugt einen Cookieeintrag der so aussieht:
a%3A3%3A%7Bi%3A0%3Bi%3A1%3Bi%3A1%3Bi%3A2%3Bi%3A2%3Bi%3A3%3B%7D
Alle Sonderzeichen werden maskiert. Du musst also bei diesem Verfahren gegebenenfalls kontrollieren, wie groß die Zeichenkette wird.
Viele Grüße
Antje