Problem mit Keksen
PhilippW
- php
Hallo!
Ich habe folgendes Problem:
Ich habe einen Counter mit Cookie-Unterstützung programmiert;
im Hauptverzeichnis der Internetseite wird der Cookie gesetzt und der Counter um 1 hoch gezählt, wenn er noch nicht vorhanden ist.
Nun soll aber der Cookie auch aus einem Unterverzeichnis (nennen wir es "test") überprüft und eventuell gesetzt wird.
Aus mir schleierhaften Gründen funktioniert das nicht und der Counter zählt ständig um 1 hoch, statt der vorgegebenen 10 Sekunden (später 1 Tag).
Hier noch mal der Quelltext:
<?php
//-----------------------------------------------
$zaehlerdatei = "test2/count.txt"; // im Unterverzeichnis logischerweise "../test2/count.txt";
$sek = "10";
//-----------------------------------------------
if(@$HTTP_COOKIE_VARS['counter'] <= time()-$sek)
{
setcookie("counter",time());
$count = fopen("$zaehlerdatei","r+");
$zaehler = fread($count,filesize("$zaehlerdatei"));
$zaehler = $zaehler+1;
rewind($count);
fwrite($count,$zaehler);
fclose($count);
}
?>
Ich hoffe, ihr könnt mir helfen!
Mit freundlichen Grüßen
Philipp
hi,
ich kann dir nicht direkt helfen, aber ich finde, das is ne ziemlich benutzerunfreundliche methode - hast du schonmal daran gedacht, dass dieser cookie ewig bei benutzern als müll vorhanden bleibt? und dass nur weil du nen counter haben willst?
also ich finde sowas nicht unterstützenswert.
MfG, THeAngel
hi,
ich kann dir nicht direkt helfen, aber ich finde, das is ne ziemlich benutzerunfreundliche methode - hast du schonmal daran gedacht, dass dieser cookie ewig bei benutzern als müll vorhanden bleibt? und dass nur weil du nen counter haben willst?
also ich finde sowas nicht unterstützenswert.MfG, THeAngel
Hallo!
Also, ich denke nicht, dass man die Verwendung von Cookies nicht unterstützen sollte.
Cookies sind für dynamische Internetseiten oft (nicht immer!) unerlässlich.
Auch große Seiten wie Google oder e-Bay benutzen Cookies; bei e-Bay kann man das ja verstehen (Login-Prozedur) aber bei Google wäre es dann ja genau so unnütz wie bei einem Counter.
Aber ein Counter kann mehr Informationen geben, als nur die Besucheranzahl anzeigen.
So ließe sich feststellen, welche Angebote am erfolgreisten sind und welche ausbesserungsbedürftig sind.
Es kann (muss aber nicht) somit auch dem User einer Seite dienen.
Zumal sich Cookies ja auch wieder (sehr einfach) löschen lassen.
Und wer keine Cookies bekommen möchte, kann sie sperren!
Mit freundlichen Grüßen
Philipp
hi,
Auch große Seiten wie Google oder e-Bay benutzen Cookies; bei e-Bay kann man das ja verstehen (Login-Prozedur) aber bei Google wäre es dann ja genau so unnütz wie bei einem Counter.
nein, google legt benutzerspezifische sucheinstellungen darin ab.
gruß,
wahsaga
ich weiss, dass viele bekannte seiten cookies zu solchen dingen misbrauchen - und ich ärgere mich jedes mal wieder drüber.
warum zum teufel legen irgendwelche banner cookies ab? ich finde oft cookies von seiten, die ich bewusst nice besucht habe, und ich empfinde sowas als nervig und absolut nicht unterstützenswert.
natürlich haben cookies Sinn, wenn sie wirklich benötigt werden, bei foren, ebay etc sind sie wirklich mehr oder weniger unerlässlich.
daher kann man sie auch nicht einfach deaktivieren, weil dann viele foren etc. gar nicht mehr funktionieren würden.
auch das 'einfache' löschen der cookies ist nervig, weil mann sich dann andauernd neu einloggen muss - und wenn man verschiedene benutzernamen und passwörter benutzt ist das verdammt nervig.
also mein resultat ist, dass ich cookies nur setze, wenn der user auch was davon hat, oder er zumindest gefragt wird.
MfG, TheAngel
im Hauptverzeichnis der Internetseite wird der Cookie gesetzt und der Counter um 1 hoch gezählt, wenn er noch nicht vorhanden ist.
Nun soll aber der Cookie auch aus einem Unterverzeichnis (nennen wir es "test") überprüft und eventuell gesetzt wird.
Aus mir schleierhaften Gründen funktioniert das nicht und der
Was funktioniert nicht, alles oder nur aus dem Unterverzeichnis heraus?
if(@$HTTP_COOKIE_VARS['counter'] <= time()-$sek)
Woher willst Du wissen, ob es einen Fehler gab, wenn Du mit @ die Fehlermeldungen unterdrückst? Fehlermeldungen sind eine Hilfe, beachte sie.
setcookie("counter",time());
Du hast die Pfadangabe vergessen. Wenn der Cookie in /test gesetzt wurde, ist er auch nur für /test gültig, nicht für /.
Weiterhin solltest Du mittels der Warnungen Deines Browsers prüfen, ob überhaupt und wenn ja, wann Cookies gesendet werden.
Bei abgeschalteten Cookies läuft Dein Zähler übrigens Amok. Und was der Engel geschrieben hat, ist auch nicht zu verachten.
Was funktioniert nicht, alles oder nur aus dem Unterverzeichnis heraus?
Nur aus dem Unterverzeichnis und umgekehrt.
if(@$HTTP_COOKIE_VARS['counter'] <= time()-$sek)
Woher willst Du wissen, ob es einen Fehler gab, wenn Du mit @ die Fehlermeldungen unterdrückst? Fehlermeldungen sind eine Hilfe, beachte sie.
Wenn die Fehlermeldungen nicht unterdrückt werden, gibt es so und so beim ersten Aufruf der Seite eine Fehlermeldung!
setcookie("counter",time());
Du hast die Pfadangabe vergessen. Wenn der Cookie in /test gesetzt wurde, ist er auch nur für /test gültig, nicht für /.
»»
Ich hab's mal mit Pfadangabe probiert; dann zählt er ständig um 1 hoch!
Weiterhin solltest Du mittels der Warnungen Deines Browsers prüfen, ob überhaupt und wenn ja, wann Cookies gesendet werden.
Das habe ich schon versucht! Cookies werden auf jeden Fall gesetzt!
Bei abgeschalteten Cookies läuft Dein Zähler übrigens Amok. Und was der Engel geschrieben hat, ist auch nicht zu verachten.
Das ist ein Risiko, das stimmt. Aber über eine Lösung wäre ich trotzdem Dankbar... :-)
Mit freundlichen Grüßen
Philipp
hi,
if(@$HTTP_COOKIE_VARS['counter'] <= time()-$sek)
Wenn die Fehlermeldungen nicht unterdrückt werden, gibt es so und so beim ersten Aufruf der Seite eine Fehlermeldung!
ja, wenn man sich dummerweise blind darauf verlässt, dass eine variable existieren müsste.
aber sowas tun wir anständigen programmierer ja nicht - wir fragen vorher ab, ob die variable existiert.
gruß,
wahsaga
Was funktioniert nicht, alles oder nur aus dem Unterverzeichnis heraus?
Nur aus dem Unterverzeichnis und umgekehrt.
Ja, wie nun? Falls Du meinst, dass ein im Unterverzeichnis gesetzter Cookie nicht im Hauptverzeichnis funktioniert, liegt es an der fehlenden/falschen Pfadangabe. Die muss / sein, soll der Cookie-Counter überall innerhalb der Domain funktionieren.
if(@$HTTP_COOKIE_VARS['counter'] <= time()-$sek)
Woher willst Du wissen, ob es einen Fehler gab, wenn Du mit @ die Fehlermeldungen unterdrückst? Fehlermeldungen sind eine Hilfe, beachte sie.
Wenn die Fehlermeldungen nicht unterdrückt werden, gibt es so und so beim ersten Aufruf der Seite eine Fehlermeldung!
Dafür gibt es isset():
if ((! isset($HTTP_COOKIE_VARS['counter'])) || ($HTTP_COOKIE_VARS['counter'] <= time()-$sek))
@ ist böse.
Ich hab's mal mit Pfadangabe probiert; dann zählt er ständig um 1 hoch!
Vielleicht gibst Du einfach mal bei jedem Seitenaufruf den Inhalt von $HTTP_COOKIE_VARS mit var_dump() aus, damit Du siehst, was da vom Browser ankommt.
Weiterhin solltest Du mittels der Warnungen Deines Browsers prüfen, ob überhaupt und wenn ja, wann Cookies gesendet werden.
Das habe ich schon versucht! Cookies werden auf jeden Fall gesetzt!
Das ist doch schonmal eine Aussage, dann muss es an dem Weg vom Browser zurück zum Server oder an der Verarbeitung der Cookie-Daten liegen.
Den alten Cookie löschst Du ja wohl hoffentlich zwischen den Änderungen am Skript.