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

War es hilfreich?

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.

http://support.microsoft.com/kb/q176113/

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");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top