Ошибка перенаправления страницы с помощью 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-адрес напрямую без входа в систему

Author: Carlos Estarita, 2017-03-04

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();

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

 0
Author: lromeraj, 2017-03-06 08:41:00

Может ли быть так, что переменная сеанса уже существует, но пуста (т. е. $_SESSION['user'] = '';)? В этом случае ваше выражение if(!isset($_SESSION['user'])) вернет true и не отправит вас в index.

Чтобы убедиться, после начального session_start(); Добавьте print_r($_SESSION);. Там вы увидите, были ли переменные уже инициализированы до проверки. Если они есть, просто сделайте unset($_SESSION); (один раз) перед повторным тестированием.

 0
Author: javiertapia, 2017-03-06 15:19:54