Как перенаправить человека после входа в систему - PullRequest
3 голосов
/ 17 сентября 2011

Я использую приведенную ниже функцию, чтобы перенаправить человека после определенной задачи (например: после входа в систему, после выхода из системы, после поиска и т. Д.) код ниже:

<?php
class common {
    /* Redirect to another page
     * $url= Url to go
    */
    function redirection($url){
        header("location: $url");
        exit();
    }
    // Some other function below
?>

Но сейчас я занимаюсь этим классом со многими проектами разных хостов (проект MLM). У меня сейчас проблема. На каком-то сервере он работает как я ожидал, но на другом сервере он не перенаправляет. Если я включу error_reporting(E_ALL); я нашел уведомление, что headers are already send. Так что я в замешательстве, что теперь я могу сделать вместо header() функции. Также я попробовал следующий код

<?php
    function redirection($url){
        echo "<div align='center'><a href='$url' target='_top'><img src='../img/proceed.jpg' alt='Proceed>>' align='absmiddle' border='0'></a></div>";
        exit();
    }
?>

Но это не желательно, поскольку все хотят автоматического перенаправления. Мои серверы Windows и Linux оба. Пожалуйста, помогите мне кто-нибудь

Ответы [ 5 ]

3 голосов
/ 17 сентября 2011

хорошо, такая ситуация очень распространена, тогда вы можете просто включить буферизацию вывода (вывод будет сохранен во внутреннем буфере).

Используйте ob_start(); в самой первой строке вашего приложения

<?php
    class common {

        /* Redirect to another page
         * $url= Url to go
         */

        function redirection($url)
        {
          header("location: $url");
          exit();
        }

        // Some other function below

    }

?>


<?php
    ob_start("redirection");

    // Your Common Class Page
    include("Common.php");

     // some code 

    ob_end_flush(); // turn off output buffering
?>
1 голос
/ 17 сентября 2011

Один из способов справиться с этим - проверить, был ли заголовок уже отправлен до вызова заголовка (местоположение).Вы можете использовать оба решения:

<?php
class common {
    /* Redirect to another page
     * $url= Url to go
    */
    function redirection($url){
        if (!headers_sent()) {
            header("location: $url");
        } else {
            echo "<div align='center'><a href='$url' target='_top'><img src='../img/proceed.jpg' alt='Proceed>>' align='absmiddle' border='0'></a></div>";
        }
        exit();
    }
// Some other function below
?>

Таким образом, если заголовки не были отправлены, вы перенаправляете автоматически.Если они есть, вы просите клиента нажать.

По этой причине, когда вы видите уведомление о перенаправлении на большинстве веб-сайтов, оно также включает предложение, гласящее: если вы не перенаправлены автоматически, нажмите здесь...

Надеюсь, это поможет.

Удачи!

0 голосов
/ 17 сентября 2011

Я бы попробовал использовать:

header("Location: ".$url, TRUE, 302);

Если вы хотите использовать другой метод или вызвать метод «обновить»,

header("Refresh:0;url=".$url);

Оба будут работать в любом случае. Проблема с вашим заголовком в том, что вы должны сообщить им, что это редирект 302, а также установить TRUE для замены существующих заголовков. Если заголовок уже установлен, его необходимо заменить, используя TRUE boolean.

302 также является общим кодом ответа HTTP для перенаправления, который необходимо указывать при попытке перенаправления с использованием заголовка.

Метод Refresh также отлично работает, хотя и имеет проблемы с совместимостью со старыми браузерами.

http://en.wikipedia.org/wiki/HTTP_302

http://php.net/manual/en/function.header.php

0 голосов
/ 17 сентября 2011

Если заголовки уже отправлены, скорее всего, потому что контент уже был записан на экран (через эхо, печать или подобное).Поскольку ваш класс не контролирует то, что было до его создания и вызова функции, маловероятно, что вы сможете многое сделать, чтобы избежать написания чего-либо ранее вашим клиентским PHP (который вызывает ваш класс).Либо используйте Javascript, либо используйте Apache перенаправления .

0 голосов
/ 17 сентября 2011

самый простой способ сделать это через клиентскую часть. Javascript ...

window.location= url
...