2016-07-16 2 views
3

Вот структура папок моего веб-сайта:Почему header() не перенаправляет меня правильно?

myweb/ 
    index.php 
    files/ 
     autoloader.php 
     login.php 

А вот мой сценарий:

// login.php 

class login{ 

    public function __construct() { 
     function signed(){ 
      header('Location: ../'); 
      exit; 
     } 
    } 

    public function index(){ 

     echo isset($_SESSION['error_message']) ? $_SESSION['error_message'] : null; 

     if ($_SESSION['login'] == 1) { 
      signed(); 
     } 

     $_SESSION['login'] = 1; 

     if ($_SESSION['login'] == 1) { 
      $_SESSION['error_message'] = 'something is wrong'; 
      header('location: ../login'); 
     } 
    } 
} 

Когда я загружаю этот путь:

localhost/myweb/login 

Вот два случая:

  1. $_SESSION['login'] равно 1: Мой скрипт перенаправляет меня на этот путь: localhost/myweb
  2. $_SESSION['login'] не равна 1: Мой скрипт перенаправляет меня на этот путь: localhost

Первый случай нормально, я имею в виду, что работает, как ожидалось. Но второй случай ошибочен, я имею в виду, что он работает не так, как ожидалось. Во втором случае он должен перенаправить меня на этот путь: localhost/myweb/login. Ну, как я могу это исправить?

Примечание: Все страницы проходят через index.php.

+0

Попробуйте следующее: header ('location:/login'); – CrazyVK56

+0

@ user4887505 Неправильно .. В вашем случае он перенаправляет меня на этот путь «localhost/login», который является недопустимым. –

+0

, если вы загрузите путь «localhost/myweb/login» и $ _SESSION ['login'] не соответствует 1 вот, вы уже находитесь в файле входа, так зачем вы перенаправляете страницу? – CrazyVK56

ответ

0

Вы можете использовать ob_start(); вверху страницы и ob_end_flush(); после заголовка. Он должен работать последний вариант, вы можете использовать JavaScript для перенаправления на страницу

ob_start(); 

класс Войти {

public function __construct() { 
    function signed(){ 
     header('Location: ../'); 
     ob_end_flush(); 
     exit; 
    } 
} 

public function index(){ 
    if ($_SESSION['login'] == 1) { 
     signed(); 
    } 

    $_SESSION['login'] = 1; 

    if ($_SESSION['login'] == 1) { 
     header('location: ../login'); 
     ob_end_flush(); 
    } 
} 

}

0

На основе кода, я не вижу состояние $_SESSION['login'] (!=) до 1.

И эта часть не имеет никакого смысла,

$_SESSION['login'] = 1; 

if ($_SESSION['login'] == 1) { 
    $_SESSION['error_message'] = 'something is wrong'; 
    header('location: ../login'); 
} 

вы всегда установить сеанс входа в 1, таким образом, нет никакого способа, он вступит в таком состоянии.

Смежные вопросы