mmofacts.com

PHP Weiterleitung nach session_start()

gepostet vor 18 Jahre, 10 Monate von BuschnicK
Hoi,

nachdem ich mein game nun erstmalig auf dem server meines providers installiert habe, habe ich folgendes Problem:
meine Weiterleitungen funktionieren nicht mehr mit folgenden Begründungen

Cannot modify header information - headers already sent by ...
Cannot send session cookie - headers already sent by ...

Dies liegt daran, dass ich bereits session_start aufgerufen habe und anschliessend per header('Location: bla.php5'); weitereiten möchte. Dies ist nicht erlaubt. Auf meinem lokalen Testserver geht es jedoch problemlos. Also Frage: Wie macht man Weiterleitungen, wenn der Header bereits gesendet wurde?

mfG,

Sören
gepostet vor 18 Jahre, 10 Monate von neit
Du kannst keine Header mehr verändern nachdem etwas ausgegeben wurde. Am einfachsten Umgehen kann man diese Beschränkung indem man einfach den Output-Buffer anschaltet.
gepostet vor 18 Jahre, 10 Monate von Roi
Ist aber SEHR unsauber....

Und am session_start() liegt das bestimmt nicht.

Eher wohl an einem echo oder sonstiger Ausgabe...

Die Trennung von PHP und Ausgabe hat eben doch ihren Sinn und sollte beherzigt werden.
gepostet vor 18 Jahre, 10 Monate von Klaus
ja mit Templates hast du voll im Griff was ausgegeben wird. :wink:
gepostet vor 18 Jahre, 10 Monate von HaSkEeR
ich denke doch dass das an session_start liegt, da dies im standard modus ja mit cookies funzt und cookies nunmal einen header mit dem auftrag senden, ein cookie zu setzen (^^)
wenn man vor session_start zum beispiel mit echo was ausgibt, kommt es zum gleichen problem, weil vorher der header mit dem cookie gesendet werden muss...
gepostet vor 18 Jahre, 10 Monate von Crafty-Catcher
Oder wenn vorher irgendwo ne Leerzeichen vor dem "
gepostet vor 18 Jahre, 10 Monate von BuschnicK
Leerzeichen etc vor session_start sind mir als Problem schon bewusst - das habe ich bereits bereinigt. Ich möchte nun lediglich nachdem session_start aufgerufen wurde (also header gesendet wurden) einen autmatischen redirect machen. Wie kann ich das serverseitig realisieren ohne noch einmal header senden zu müssen?

mfG,

Sören
gepostet vor 18 Jahre, 10 Monate von schokofreak
Session Start sendet nur ein Header feld (nämlich das der Temporären Cookies). Solange _nur_ Header felder an den Client gesendet wurden, kann man problemlos noch eine Art von Redirect senden, aber nicht mehr die anderen.

Das einfachste ist, du sendest die für deinen Redirect benötigten Ausgaben direkt per Header-Manipulation.

Es gibt nämlich die Möglichkeit, anstatt n 200 OK dirrekt n redirect zu machen; es gibt auch die möglcihkeit nach 200 OK noch weitere Zeieln im Header anzufügen für den Redirect.

Nun was tust du nun genau?
Nimm dir n Sniffer: Kuck dir an, wie der default PHP Redirect aussieht (weiss das doch selbst ned ). Manipuliert der die erste Header Zeile, ist ned gut. Ansonsten fügst nach Session Start einfach die weiteren Header Zeilen manuell hinzu.
Ists die erste Header-Zeile gehst über die W3C Referenz und kuckst dir alle möglichkeiten an, n Redirect zu machen.

In deinem Resultat machst genau das selbe: Vor dem Redirect-Command machst einfach ne Ausgabe eines Testzwecks und n DIE. Im Sniffer kuckst nun, ob vor deinem Testtext schon ne andere NICHT HEADER Ausgabe kommt. Wenn schon, nimmst diese raus.

Reissen alle Stricke; machst den Redirect via HTTP EQUIV Redirect (im HTML Header; weist wo?)

Gruss
gepostet vor 18 Jahre, 10 Monate von BuschnicK
Weshalb kann es eigentlich sein, dass es auf meinem lokalen Testserver einwandfrei klappt und auf dem Server meines Providers nicht?

Auch lokal baue ich die halbe Seite schon auf (habe also insbesondere den Header schon gesendet) und mache dann noch einen header("Location: bla");. Das funktionierte einwandfrei...

Hat mein lokaler Server dann die "unschöne" buffered Lösung per default aktiviert und mein Provider nicht? Warum ist das so unschön?

mfG,

Sören
gepostet vor 18 Jahre, 10 Monate von neit
Laß dir nichts einreden, das ist zwar unschön aber funktioniert blendend. Wenn du später gzip o.Ä. verwenden willst, brauchst du den Output-Buffer sowieso!
gepostet vor 18 Jahre, 10 Monate von schokofreak
buffered ist sehr schönd!
Ich würd nur kucken, dass das ganze im Worst case dennoch funzt aber ansonsten sprich nix gegen buffered...
gepostet vor 18 Jahre, 10 Monate von BuschnicK
Jo danke. Ich nutze das jetzt auch, ist der Weg des geringsten Widerstandes gewesen um mein game zum Laufen zu bringen. Ich find's auch eigentlich sehr elegant/naheliegend. Immerhin macht man das bei rich client grafischen Dingen doch auch: double buffering...

mfG,

Sören

Auf diese Diskussion antworten