Time des letzten Besuchs "erinnern" - (ohne Session)
dynamico
- php
Das muss doch möglich sein - ich will die Zeit des letzten Besuchs in einem (mehreren) Cookies abspeichern und diese - solange der Besucher auf meiner Seite surft im Gedächtnis behalten - und das ohne Sessions - z.B. für ein Forum: auf der Einstiegsseite sollen die neuen Texte seit dem letzten Besuch als neu markiert werden - und dass auch wenn der Besucher einen Beitrag liest (also die Einstiegsseite verlässt) und wieder zurückkommt - wie mache ich sowas?
Das muss doch möglich sein - ich will die Zeit des letzten Besuchs in einem (mehreren) Cookies abspeichern und diese - solange der Besucher auf meiner Seite surft im Gedächtnis behalten - und das ohne Sessions - z.B. für ein Forum: auf der Einstiegsseite sollen die neuen Texte seit dem letzten Besuch als neu markiert werden - und dass auch wenn der Besucher einen Beitrag liest (also die Einstiegsseite verlässt) und wieder zurückkommt - wie mache ich sowas?
Da es nicht sicher möglich ist, beim Verlassen Deiner Seiten einen Cookie zu speichern (bzw. überhaupt das "Verlassen" festzustellen), benötigst Du zwei Zeiten in Deinem Cookie: Einmal die Zeit des letzten Besuches (A) und einmal die Zeit (einfach aus time()) des aktuellen Seitenaufrufs (B).
Zum Anzeigen der neuen oder geänderten Dinge benutzt Du logischerweise grundsätzlich und immer nur Zeit A.
Wie kommt nun die Referenzzeit in Zeit A? Ganz einfach: Du prüfst bei _jedem_ Seitenaufruf, ob die Zeit B länger als x Minuten her ist; wenn ja, haben wir es mit einem neuen Besuch zu tun (unserer eigenen Festlegung "x Minuten Abwesenheit = neuer Besuch" nach).
Da wir bei jedem Seitenabruf in Zeit B die aktuelle Zeit speichern, befindet sich dort beim dann jeweils nächsten Seitenabruf die Zeit, an dem zum letzten Mal eine Seite abgerufen wurde, was in diesem Fall wiederum die Zeit ist, an dem der letzte Besuch beendet wurde (nicht exakt, aber so ziemlich).
Du brauchst also jetzt nichts weiter zu tun, als Zeit B in Zeit A zu kopieren, Zeit B wieder auf die aktuelle Zeit zu setzen und Deinen Cookie an den Browser zurück zu schicken.
Da dieses Kopieren nur dann stattfindet, wenn der letzte Seitenabruf (=Zeit B) länger als x Minuten her ist, behältst Du den ganzen aktuellen Besuch über die Zeit des letzten Besuchs in Zeit A.
Nebenbemerkungen:
Denke bitte daran, den Keks nicht automatisch zu setzen, sondern nur nach Aufforderung durch den Besucher. Was Du vor hast, ist zwar eine sehr feine Sache (ich benutze es selber auf meinen Seiten), aber vielen Leuten gehen die Massen an Cookies mittlerweile fürchterlich auf die Nerven. Cookies, deren Zweck unbekannt ist, fallen entweder einer monatlichen Löschorgie zum Opfer oder werden gar nicht erst angenommen. Und das wäre in Deinem Fall Schade drum.
Weiterhin solltest Du beachten, daß jeder Eintrag in $_COOKIE[] einem Cookie entspricht. Benutzt Du also $_COOKIE["zeita"] und $_COOKIE["zeitb"], zwingst Du den Besuchern zwei Cookies und damit möglicherweise auch zwei Sicherheitsabfragen auf.
Um diesen unnötigen Aufwand zu vermeiden, benutze besser etwas in der Richtung $_COOKIE["besuch"]=Array("zeita"=>$zeita,"zeitb"=>time()).
Ich bin mir nicht ganz sicher, ob das so mit direktem Array funktioniert; falls nicht, benutze ein eigenständiges Feld und speichere es dann mittels der Funktion serialize() im Cookie.
Gruß,
soenk.e