2 Stimmen

Semantik des Setzens von Cookies und Weiterleitung ohne Header-Fehler

Ich würde gerne folgendes in php machen:

setcookie('name', $value, $Cookie_Expiration,'/');

then some action 

header("location:http://www.example.com")

das Problem ist, dass ich : Warnung: Cannot modify header information - headers already sent by (...etc )

Könnten Sie mir bitte sagen, was ich falsch mache und ob es eine Möglichkeit gibt, dies zu tun?

Übrigens ist dieser Code, bevor irgendeine Ausgabe gemacht wird ... die Cookie-Einstellung Teil funktioniert gut auf seine eigene und so tut die Umleitung Code....die Kombination fehlschlägt

Dankeschön

2voto

tplaner Punkte 8205

Cookies werden in der Kopfzeile gesendet, und Sie können keine Kopfzeilen setzen, wenn bereits eine Ausgabe an den Browser gesendet wurde (was der Fall ist, wenn Sie das Cookie setzen).

Die einfachste Lösung, die allerdings ein wenig schlampig ist, ist die Verwendung von ob_start() y ob_clean() zum Beispiel:

ob_start();
setcookie('name', $value, time()+3600);
ob_clean();
header("Location:http://www.example.com");

Bitte beachten Sie das große L in der Kopfzeile des Ortes, es ist sehr wichtig.

Eine bessere Lösung könnte darin bestehen, das Cookie auf der Seite zu setzen, auf die Sie umleiten, und die Informationen zum Setzen dieser Kopfzeile über eine Sitzung zu übermitteln.

0voto

TooManyCooks Punkte 499

Von der php-Handbuch:

setcookie() definiert ein Cookie, das zusammen mit den übrigen HTTP-Headern gesendet wird. Wie andere Header auch, müssen Cookies vor jeder Ausgabe Ihres Skripts gesendet werden (dies ist eine Protokollbeschränkung). Diese erfordert, dass Sie Aufrufe dieser Funktion vor jeder Ausgabe, einschließlich und Tags sowie Leerzeichen, platzieren.

sagt im Grunde das aus, was Sie bereits aus Ihrer Warnung wissen: dass setcookie selbst einen Header sendet. Ich würde mich wahrscheinlich fragen, warum Sie ein Cookie auf einer Seite setzen und dann umleiten wollen. Warum nicht einfach umleiten und die Daten in die URL einfügen und sie dann auf der Zielseite abholen und die Daten dort verwenden und/oder sie in einem Cookie speichern, oder in Sitzungsdaten speichern, wenn Sie bereits eine Sitzung eingerichtet haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X