2010-11-28 12 views
0

Gibt es eine Möglichkeit ist Seiten in PHP zu umleiten, ohne header('Location:'.''); becouse es immer wieder Probleme mit Sitzungen machen (: Can not Sitzungscache senden - Header bereits gesendet)Redirect Seiten in PHP

+0

Es ist nie ein Problem mit Sitzungen machen. Der HTTP-Header "Location" ist der einzig richtige Weg. Obwohl du deine lahme Antwort trotzdem bekommst, nur weil diese Seite –

+0

@Col saugt. Schrapnell Das ist so wahr. Unerfahrene Programmierer neigen dazu, immer die Symptome und nicht die Ursache loszuwerden. Wir müssen ihnen beibringen, das zu klären. – aefxx

+1

@Col. Schrapnell Sie besuchen diese Seite ziemlich oft für jemanden mit einem starken Hass darauf. @ Sudantha Sie haben ein paar ziemlich genaue Antworten zur Auswahl. –

Antwort

3

Es gibt andere Optionen zum Umleiten in HTML (wie mit META oder JavaScript). Aber es ist keine richtige HTTP-Umleitung.

Also anstatt nach einer Alternative zu suchen, sollten Sie besser die HTTP-Variante arbeiten. In diesem Fall können Sie den HTTP-Header nur ändern, wenn er noch nicht gesendet wurde. Und das passiert immer dann, wenn Sie etwas ausgeben (entweder explizit oder implizit). Sie können dies verhindern, indem die Ausgabe Pufferung der Ausgangssteuerung des ob_startvor jeder Ausgang geschehen war nennen, möglicherweise direkt am Anfang der Skriptdatei anzubieten:

<?php 
ob_start(); 

// rest of the file 

Vergewissern Sie sich, dass es nicht vor der Öffnung PHP-Tag <?php wie leere Zeilen oder eine UTF BOM.

+0

ich bin bereits mit ob_start, aber ich weiß nicht, wo genau es zu verwenden – Sudantha

+0

Oder besser noch, senden Sie einfach den Header vor alles ausgeben. Es ist nicht so, als würde der Benutzer es trotzdem sehen. Die Verwendung der Pufferung für die Ausgabe fühlt sich an wie ein schmutziger Hack und verdeckt einen Mangel an Struktur. – tdammers

+0

@ Sudantha: Rufen Sie 'ob_start' vor allem anderen auf. Und stellen Sie sicher, dass es vor dem Öffnen keine Gumbo

2

Nein, ohne header haben Sie kein Glück (Sie könnten Apache mod_rewrite verwenden, aber das würde passieren, bevor Ihre Datei sogar berührt wird).

Warum nicht ob_start (Ausgabepufferung) verwenden. Einen Schnellstart finden Sie unter PHP manual.

Viel Glück

1

Wie vor dem Gebrauch ob_start() rechts an der Spitze Ihrer Anwendungsseite erwähnt. Implementieren Sie nicht die zweifelhaften Javascript-Funktionen, die in anderen Antworten erwähnt werden, ich würde sagen, dass sie extrem schlecht sind. PHP gibt es schon eine Weile, also ist es getestet und funktioniert, Sie haben möglicherweise einen fehlerhaften Leerraum oder geben etwas an den Browser aus und versuchen dann, Header-Informationen zu ändern, die Sie nicht tun können. Also:

Verwendung ob_start Prüfung für fehlerhaften Leerraum und löschen Sie es