Cookiesetzung überprüfen
Stahli
- php
Hallo!
Ich möchte überprüfen, ob ein Browser Cookies aktiviert hat oder nicht. Ich weiß das es sich auch mit dem Rückgabewert von setcookie() überprüfen lässt, bevor ich das wußte hatte ich jedoch folgenden Ansatz.
setcookie('meincookie','meinwert',time()+600);
if(isset($_COOKIE['meincookie']))
echo 'cookie aktiviert';
else
echo 'cookie nicht aktiviert';
Jedoch wurde immer ausgegeben, dass Cookies nicht aktiviert seien, unabhängig vom Browser. Nachdem ich die F5 Taste betätigt hatte wurde dann richtigerweise ausgegeben dass cookies aktiviert wären.
Weiß jemand woran es liegen könnte?
Wird die Superglobale $_COOKIE nicht von setcookie() "aktualisiert"?
Danke und schönen Tag noch.
hi,
Ich möchte überprüfen, ob ein Browser Cookies aktiviert hat oder nicht. Ich weiß das es sich auch mit dem Rückgabewert von setcookie() überprüfen lässt,
Nein, das weißt du nicht, weil dem nicht so ist.
PHP schickt den Cookie-Header nur zum Client - ob dieser dort auch akzeptiert wird, kann es beim Setzen des Cookies überhaupt nicht feststellen.
setcookie('meincookie','meinwert',time()+600);
if(isset($_COOKIE['meincookie']))
echo 'cookie aktiviert';
Jedoch wurde immer ausgegeben, dass Cookies nicht aktiviert seien, unabhängig vom Browser.
Natürlich.
Hättest du die Hinweise zu setcookie im Manual aufmerksam und mit Verstand gelesen, wüsstest du jetzt auch bereits, wieso.
Hole das bitte nach.
Nachdem ich die F5 Taste betätigt hatte wurde dann richtigerweise ausgegeben dass cookies aktiviert wären.
Weiß jemand woran es liegen könnte?
Ja - jeder, der sich informiert, bevor er fragt.
gruß,
wahsaga
Hi,
Hättest du die Hinweise zu setcookie im Manual aufmerksam und mit Verstand gelesen, wüsstest du jetzt auch bereits, wieso.
Hole das bitte nach.
Tut mir leid, ich hatte die Lösung in einem PHP-Buch gelesen und dachte dass der Ansatz korrekt ist, die Umsetzung jedoch nicht.
Entschuldigung und danke für die Tipps.
Gruß Felix
Hallo,
Ich weiß das es sich auch mit dem Rückgabewert von setcookie() überprüfen lässt...
das ist schon mal nicht korrekt. Die Rückgabe von setcookie() sagt nichts darüber aus, ob der Browser Cookies akzepiert. Sie gibt nur darüber auskunft, ob der entsprechende HTTP-Header des Response gesetzt werden konnte.
Ein möglicher Fall, wo diese Funktion FALSE
zurückgeben kann, tritt auf, wenn bereits eine Ausgabe des Inhalts vor setcookie() stattfand.
Jedoch wurde immer ausgegeben, dass Cookies nicht aktiviert seien, unabhängig vom Browser. Nachdem ich die F5 Taste betätigt hatte wurde dann richtigerweise ausgegeben dass cookies aktiviert wären.
In der Beschreibung der funktion setcookie() findet sich unter "Häufige Probleme:" gleich als erstes:
Cookies werden nicht sichtbar, bevor nicht eine Seite geladen wird,
für die das Cookie sichtbar sein soll. Um zu testen, ob ein Cookie
erfolgreich gesetzt wurde, prüfen Sie noch vor der Ablaufzeit auf
DER NÄCHSTEN GELADENEN SEITE[!], ob das Cookie vorhanden ist. ...
Wenn in Deinem Script das Cookie gesetzt wird, wird gleichfalls auch der Inhalt des Scripts ausgeliefert. Jedoch werden Cookies nur bei einem Request gesendet und dieser erfolgte ja bereits. Also kann erst beim nächsten Request abgeprüft werden, ob der Browser ein Cookie sendet.
Üblicherweise wird dies mit einer Weiterleitung verbunden:
if(!$_GET['pruef']){ // noch kein Cookie gesetzt
setcookie('Kecks','Butter',time()+600);
if(substr(php_sapi_name(),0,3)!='cgi') // CGI-/Modul-Unterscheidung
header($_SERVER['SERVER_PROTOCOL'].' 307 Temporary Redirect');
else header('Status: 307');
// Erstellen des QueryStrings
$qs=($_SERVER["QUERY_STRING"]!=='' ? '&' : '?').'pruef=1';
// Umleitung auf selbes Script + $_GET['pruef']
header('Location: http://'.$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"].$qs);
}
else echo 'cookie '.(isset($_COOKIE['Kecks']) ? '' : 'nicht ').'aktiviert';
Gruß aus Berlin!
eddi