Перенаправление заголовка PHP не работает, если сеанс не установлен

#javascript #php

#javascript #php

Вопрос:

Я пытаюсь проверить, не вошел ли пользователь в cart.php , если их нет — перенаправьте их на login.php .

Это не работает, поэтому я попытался поместить это в оператор elseif. Если они вошли в систему и находятся на странице корзины, перенаправьте их на страницу корзины, а если они не перенаправлены на страницу входа.

Он работает в том смысле, что он перенаправляет, но если я войду в систему, он все равно перенаправляет на login.php .

Также я не уверен, почему ни одно из предупреждений JS не работает.

 if (isset($_SESSION['username'])){
    header("Location: http://localhost/techiteasy/cart.php");
}
else if (!isset($_SESSION['username'])){
    header("Location: http://localhost/techiteasy/login.php");
    echo '<script language="javascript">';
    echo 'alert("Please Login/Register")';
    echo '</script>';
}
  

Комментарии:

1. Вы не можете получить вывод после использования header() для перенаправления

2. Также не кажется, что else if достаточно простого else

3. Насколько я вижу, вы перенаправляете на login.php во втором случае. Что в этом плохого?

4. После выполнения a header('Location: ...') вы отправляете браузеру команду перейти на другую страницу. Поэтому все, что вы повторяете после этого, просто исчезнет в эфире, поскольку текущей страницы больше нет в браузере

5. Я попытался упростить код, который не работает. Чтобы иметь только один заголовок — — — if (!isset($_SESSION[‘username’])){ заголовок(«Местоположение: localhost/techiteasy/login.php » ); }

Ответ №1:

После перенаправления вы не можете добавить больше кода, новая страница будет вызвана, и будет запущен скрипт новой страницы.

Вам нужно что-то перенести со страницы на другую.

Обычно я использую файл cookie с коротким временем (2-5 секунд), новая страница будет вызывать проверку, установлен ли файл cookie, если он показывает предупреждение и отменяет установку файла cookie.

Здесь в коде, который вы можете видеть, я ввел только оператор if (без else или else if), потому что, когда скрипт запускает местоположение заголовка, следующий код не запускается, и загружается новая страница.

 if (!isset($_SESSION['username'])){
    setcookie('notlogged', true, time()   3;)

    header("Location: http://localhost/techiteasy/login.php");     
}
header("Location: http://localhost/techiteasy/cart.php");
  

В login.php

 if (isset($_COOKIE['notlogged']) amp;amp; $_COOKIE['notlogged'] == true){
    echo '<script language="javascript">';
    echo 'alert("Please Login/Register")';
    echo '</script>';

    unset($_COOKIE['notlogged']);
}
  

Попробуйте это 😉

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

Ответ №2:

Вы можете просто использовать, как показано ниже. Не нужно снова проверять отрицательное условие. Просто используйте if-else .

 if (isset($_SESSION['username'])){
    header("Location: http://localhost/techiteasy/cart.php");
}
else{
    header("Location: http://localhost/techiteasy/login.php");
    echo '<script language="javascript">';
    echo 'alert("Please Login/Register")';
    echo '</script>';
}
  

Ответ №3:

Попробуйте это на PHP5

     if(isset($_SESSION['username'])){ header("Location: http://localhost/techiteasy/cart.php"); 
    }
    else{
    if(!isset($_SESSION['username'])){
     echo '<script>alert("Login with vaild user and pass");</script>';
header("Location: http://localhost/techiteasy/login.php");
    exit;
     }}
  

Для PHP7

     if(isset($_SESSION['username'])){ header("Location: http://localhost/techiteasy/cart.php, true, 301"); 
    }
    else{
    if(!isset($_SESSION['username'])){ 
     echo '<script>alert("Login with vaild user and pass");</script>';
header("Location: http://localhost/techiteasy/login.php, true, 301");
    exit;
     }}