Ошибка перенаправления страницы с помощью PHP [дубликат]
смонтируйте свое веб-приложение на веб-сервер, на локальном все работает отлично, запросы, среди прочего, у меня есть система страниц для зарегистрированных и зарегистрированных пользователей, Я манипулирую ими с сеансами, проверками, среди прочего, каждая страница (зарегистрированные пользователи) имеет проверку в заголовках, которая отвечает за проверку и проверка пользователей по соображениям безопасности с помощью бэкэнда, который у меня есть, если условия не выполнены, то есть он не проходит через систему проверки, которую я имею, сеансы не создаются, и если сеансы не создаются, я посылаю их на index.php, здесь код, чтобы лучше понять, что я говорю.
<?php
session_start();
if(!isset($_SESSION['user']) || (!isset($_SESSION['nick'])) ){
header("Location: index.php?session=TimeOut");
exit();
}else{
if($_SESSION['user']!=$_SESSION['name_validate'] || $_SESSION['id']!=$_SESSION['id_user']||$_SESSION['user_validate']!=$_SESSION['permise'] || $_SESSION['data_validate']!=$_SESSION['random'] ){
header("Location: index.php?access=Denied");
exit();
}
}
?>
<!DOCTYPE html>
также попробуйте это так:
<?php
/* Redirecciona a una página diferente en el mismo directorio el cual se hizo la petición */
$host = $_SERVER['HTTP_HOST'];
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra = 'mypage.php';
header("Location: http://$host$uri/$extra");
exit;
?>
//Del manual de PHP
как вы увидите перед любой ввод html или данных, поэтому он должен работать, кроме того, консоль не помечает меня какой-либо ошибкой, поэтому я не знаю, где проблема.Короче говоря, этот код был сделан, чтобы пользователи не размещали URL-адрес напрямую без входа в систему
2 answers
Чтобы решить эту проблему, добавьте ob_start();
сразу после session_start();
принимая ваш код будет выглядеть так:
<?php
session_start();
ob_start();
if(!isset($_SESSION['user']) || (!isset($_SESSION['nick'])) ){
header("Location: index.php?session=TimeOut");
exit();
}else{
if($_SESSION['user']!=$_SESSION['name_validate'] || $_SESSION['id']!=$_SESSION['id_user']||$_SESSION['user_validate']!=$_SESSION['permise'] || $_SESSION['data_validate']!=$_SESSION['random'] ){
header("Location: index.php?access=Denied");
exit();
}
}
?>
Здесь я оставляю вам руководство и информацию об этой функции в PHP:
Ob_start();
Надеюсь, это поможет вам!
Может ли быть так, что переменная сеанса уже существует, но пуста (т. е. $_SESSION['user'] = '';
)? В этом случае ваше выражение if(!isset($_SESSION['user']))
вернет true
и не отправит вас в index.
Чтобы убедиться, после начального session_start();
Добавьте print_r($_SESSION);
. Там вы увидите, были ли переменные уже инициализированы до проверки. Если они есть, просто сделайте unset($_SESSION);
(один раз) перед повторным тестированием.