Wie kann ich ein Cookie und dann in PHP umleiten?
-
03-07-2019 - |
Frage
Nach ein bisschen Verarbeitung zu tun, möchte ich einen Cookie-Wert auf Benutzereingaben setzen und sie dann auf eine neue Seite umgeleitet werden. Allerdings wird das Cookie nicht gesetzt zu werden. Wenn ich die Umleitung kommentieren, dann wird das Cookie erfolgreich gesetzt. Ich nehme an, das ein Header Problem irgendeine Art ist. Was ist die beste Abhilfe für diese Situation?
if($form_submitted) {
...
setcookie('type_id', $new_type_id, time() + 60*60*24*30);
header("Location: $url");
exit;
}
Beachten Sie, dass setcookie kehrt in jedem Fall true
und ich erhalte keine Fehler / Warnungen / Hinweise.
EDIT: Ich bin mit Unix / Apache / MySQL / PHP
Lösung
Wenn Sie einen Menschen Urls oder Unterordner haben (wie www.domain.com/path1/path2/), dann müssen Sie Cookie-Pfad zu / Set für alle Pfade zu arbeiten, nicht nur aktuelle.
if($form_submitted) {
...
setcookie('type_id', $new_type_id, time() + 60*60*24*30, '/');
header("Location: $url");
exit;
}
Von PHP-Handbuch:
Der Pfad auf dem Server, in dem die Cookie auf zur Verfügung. Wenn auf ‚/‘, Wird das Cookie verfügbar sein innerhalb der gesamten Domäne. Wenn auf '/ Foo /', wird das Cookie nur sein verfügbar im Verzeichnis / foo / und alle Unterverzeichnisse wie / Foo / bar / der Domäne. Der Standard Wert ist das aktuelle Verzeichnis, das das Cookie wird gesetzt in.
Andere Tipps
Ich nehme an, Sie IIS ausgeführt? Es gibt einen Know Fehler mit IIS-Versionen von weniger als 7, wenn sie beide versucht, wird ein Cookie gesetzt und einen Location-Header in der gleichen Anfrage.
Wie testen Sie, ob das Cookie gesetzt wird? Cookies sind auf der weiter Seite, nachdem sie eingestellt sind.
Häufige Probleme:
Cookies werden nicht bis zum nächsten Laden einer Seite sichtbar werden, dass das Cookie sichtbar sein. Um zu testen, ob ein Cookie erfolgreich gesetzt wurde, überprüfen Sie das Cookie auf einer nächsten Lade Seite, bevor das Cookie abläuft. Ablaufzeit wird über den Verfall Parameter eingestellt. Eine gute Möglichkeit, die Existenz von Cookies durch einfach zu debuggen print_r ($ _ COOKIE) gefordert wird;.
Ich war in der Lage, dieses Problem zu lösen, indem eine leichte Verzögerung in dem Refresh-Header verwendet wird. Wir setzen den Header (die vor allen Methoden getan werden muss, die möglicherweise ausgegeben, wie setcookie), und legen Sie die Cookies. Ich habe eine Nachricht, so dass der Benutzer nicht einen leeren Bildschirm für diese paar Sekunden nicht sehen.
header("refresh: 2; url=$url");
setcookie('type_id', $new_type_id, time() + 60*60*24*30, '/');
echo "Processing, please wait...";
Verwenden Sie eine relative URL in der Kopfzeile:
@Header("Location: orders_9090_1.php");