Не могу сделать редирект. Какая ошибка в коде?
Пытаюсь написать сайт. Стартовая страница просит ввести логин и пароль. После авторизации пользователь проходит на сайт. Одна из страниц сайта требует авторизации пользователя, если он её не прошел (редирект на страницу с логином и паролем), но этого не происходит и выдаёт ошибку: ERR_TOO_MANY_REDIRECTS. Код страницы с редиректом:
<?php session_start(); if ($_SESSION['login'] = false); { header('Location:index.php'); if ($_SESSION['login'] = true); { header('Location:books'); exit; } } ?> |
<?php session_start(); if ($_SESSION['login'] = false); { header('Location:index.php'); if ($_SESSION['login'] = true); { header('Location:books'); exit; } } ?>
Дополнительно:
if ($_SESSION['login'] = false);
Внимательнее будьте
= - оператор присваивания
== - оператор не строгого сравнения
=== - оператор строгого сравнения
<?php
session_start();
if ($_SESSION['login'] === false);
{
header('Location:index.php');
if ($_SESSION['login'] === true);
{
header('Location:books');
}
}
?>
Но ошибка всё равно возникает. Маленькое уточнение: второе условие происходит на странице books. Когда убираешь второе условие, то естественно всегда перекидывает на страницу логина и пароля.
И что у вас хранится в сессии, распечатку можно?
<?php
session_start();
if ($_SESSION['user'])
{
header('Location: url: сайт');
}
?>
Если Я правильно понял Ваш вопрос...
print_r($_SESSION)
<?php
session_start();
if ($_SESSION['user'])
{
header('Location: url: сайт');
}
?>
Т.е. должно выглядить так:
<?php
session_start();
if ($_SESSION['user'])
{
header('Location: url: сайт');
}
print_r($_SESSION)
?>
Выдало: Array()
Документация по сессиям: https://www.php.net/manual/ru/book.session.php
Ответы:
<?php session_start(); if ($_SESSION['login'] = false); //точки с запятой быть не должно { header('Location:index.php'); if ($_SESSION['login'] = true); // не один =, а два == и скорее нужно так: if (!empty($_SESSION['login'] )) { header('Location:books'); exit; } } ?> |
<?php session_start(); if ($_SESSION['login'] = false); //точки с запятой быть не должно { header('Location:index.php'); if ($_SESSION['login'] = true); // не один =, а два == и скорее нужно так: if (!empty($_SESSION['login'] )) { header('Location:books'); exit; } } ?>
У вас вообще проверка if ($_SESSION['login'] = true) вложена в другой обратный IF и никогда не выполнится, надо вынести и писать ELSE IF
P.S вообще все не правильно, это код учившегося два часа, надо усердней читать вначале.
- Спасибо большое! Оказывается код такой должен быть:
<?php
session_start();if(!$_SESSION['myrow']){
header("Location: /");
exit;
}
?>Я решил php по ходу пьессы изучать... Что-то получается, что-то нет... Спасибо всем за помощь!
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для выполнения редиректа на другую страницу с помощью PHP, нужно использовать функцию header(). Однако, для того чтобы редирект корректно работал, необходимо убедиться, что перед вызовом функции header() не было отправлено никаких данных на страницу, включая пробелы или символы новой строки.
Пример кода для выполнения редиректа на другую страницу:
header("Location: http://www.example.com"); exit();
Обратите внимание, что после вызова функции header() следует использовать exit() или die(), чтобы прекратить выполнение скрипта и убедиться, что редирект произойдет немедленно. Если этого не сделать, PHP может продолжить выполнение скрипта, что может вызвать проблемы с редиректом.
Также убедитесь, что перед вызовом функции header() не было вывода данных на страницу, даже случайно. Любой вывод на страницу, включая пробелы или символы новой строки, предотвратит корректное выполнение редиректа.
Если после исправления указанных моментов редирект все равно не работает, возможно проблема в настройках сервера. Убедитесь, что сервер правильно настроен для обработки редиректов и не блокирует использование функции header().