Cookies funktionieren nicht richtig

Hattrix

Erfahrenes Mitglied
Hallo,

ich hoffe, ich habe den richtigen Topic gewählt, ansonsten bitte verschieben.

Und zwar habe ich mit Cookies eine Zeit (2 Std.) festgelegt, wann ein Feature bei einem Browsergame wieder zur Verfügung steht. Doch viele User melden, dass man auch nach 2 Std. nichts ändern kann.

PHP:
 if(empty($_COOKIE['test']))
 {
   setcookie("test","test",time()+7200);
 }


if(isset($_COOKIE['test']) echo 'test';

Was ist daran evtl. falsch? Ich kann kein Fehler finden!
 
Ich schätze ma das empty, da der cookie ja gar nicht gesetzt ist.
also:

PHP:
 if(!isset($_COOKIE['test']))
 {
   setcookie("test","test",time()+7200);
 }


if(isset($_COOKIE['test']) echo 'test';

Sollte gehen
 
Der Fehler befindet sich in diesem Fall zwischen Tastatur und Stuhl (pebkac - problem exists between keyboard and chair) ;) .

Damit ein Cookie von PHP verarbeitet werden kann muss er vom Browser an den Server geschickt werden.
Da Du aber dort gerade erst veranlasst dass der Cookie vom Server an den Browser geschickt wird ist dieser auch noch nicht im Array $_COOKIE vorhanden, da der Browser ihn zu diesem Zeitpunkt ja noch garnicht hat und somit nicht schicken kann.

Nach einem Reload allerdings sollte Dein Cookie vorhanden sein.

@BadMatt: empty() beinhaltet eine Pruefung ob die Variable gesetzt ist. empty() kann aber insofern irrefuehrend sein wenn z.B. der Integer-Wert 0 geprueft wird, denn auch dieser ergibt bei empty(), faelschlicherweise, true.
 
Ok, aber wie prüfe ich denn, ob Cookie nicht gesetzt wurde? Kann es dadurch dazu kommen, dass das Feature auch nach z.B. 3 Stunden noch nicht verfügbar ist?
 
Ob der Keks wirklich gesetzt wurde, also ob er vom Client angenommen wurde, kannst Du nicht direkt pruefen.
Beim naechsten Seitenaufruf ist er entweder in $_COOKIE verfuegbar oder eben nicht, aber direkt nach dem Aufruf von setcookie() hast Du keine Chance zu wissen ob Dein Cookie nun erfolgreich angenommen wurde oder nicht.

Ich hab mal ein Tutorial geschrieben zur Ueberpruefung ob der Client Cookies unterstuetzt/annimmt oder nicht (und nebenbei wird auch noch Support fuer JavaScript gecheckt).
Finden kannst Du dieses Tutorial hier.

Wenn Deine Seite aber die Verfuegbarkeit von Cookies voraussetzt solltest Du Dir eventuell darueber Gedanken machen ob dies lebenswichtige Funktionen sind oder optionale Goodies.

Auf meiner Seite checke ich die Verfuegbarkeit von Cookies und JavaScript. Anhand dessen wird entschieden ob die SessionID per Cookie oder URL uebergeben wird, ob dem User beim Login die Checkbox zum setzen des permanenten Logins zur Verfuegung steht und ob er im Forum JavaScript-Buttons zur Text-Formatierung hat.

Und Du solltest auch ueberlegen ob die Daten nicht auf andere Art transportiert werden koennen, z.B. in einer Session, da ja die SessionID alternativ auch per URL uebergeben werden kann.
 
Dein Tutorial sieht genauso aus, wie mein Script. Auch wenn der Keks erst nach dem 2.Aufruf der Seite gesetzt wird, warum kann man z.B. nach 3 Std. die Features nicht nutzen? :(
 
Das kommt ganz darauf an wie der Cookie gesetzt wird.
Gibst Du ein Expiry-Date an oder nicht?
Falls nicht wird der Cookie wie ein Session-Cookie gehandhabt, das heisst dass sobald der Browser geschlossen wird ist der Cookie ungueltig und wird nicht mehr genutzt oder gar geloescht.
Ansonsten ist vielleicht die Zeit bis zum Ablauf-Datum zu kurz.
 
Zurück