перенаправить страницу в корневой каталог - PullRequest
0 голосов
/ 14 мая 2009

У меня есть этот класс здесь, и я пытаюсь сделать следующее: если проверка чего-либо равна false, то пользователь будет перенаправлен на путь корневого домена. но это не работает. вот класс

class security {
    function checkAuth() {
        if(isset($_COOKIE['AUTHID'])) {
            $cookie = $this->secure($_COOKIE['AUTHID']);
            $query = mysql_query("select username,password,active from tbl_users where password = '$cookie'") or die(mysql_error());
            while($row = mysql_fetch_assoc($query)) {
                //check if cookie is set
                if(!isset($_COOKIE['AUTHID'])) {
                    header("Location: ".realpath($_SERVER['HTTP_HOST']));
                }

                //check if user is active
                if($cookie == $row['password']) { 
                    if($row['active'] == '0') {
                        setcookie("AUTHID","",time() - 100000);
                        header("Location: ".realpath($_SERVER['HTTP_HOST']));
                    }
                    else { //user is active
                    }
                }
                //check if hash in cookie matches hash in db
                if($cookie != $row['password']) { 
                    setcookie("AUTHID","",time() - 100000);
                    header("Location: ".realpath($_SERVER['HTTP_HOST']));
                }
            }
        }
    }
}
?>

Ответы [ 5 ]

6 голосов
/ 14 мая 2009
  1. Я не думаю, что было бы хорошей идеей перенаправлять / выводить данные в классе по многим причинам, наиболее важным из которых является то, что он бросает вызов всему смыслу ОО. Вместо этого верните false и попросите вызывающий скрипт выполнить перенаправление.
  2. Вам нужно отправлять заголовки, как ПЕРВОЕ, что вы делаете, перенаправление на основе заголовка не будет работать, если PHP начал выводить текст, поскольку заголовки уже были отправлены.

Попробуйте

$_SERVER['SCRIPT_URI'];

или

"http://" . $_SERVER['HTTP_HOST'];

И, да, выход (); после отправки этого заголовка.

Не забудьте также отправить соответствующий код ответа заголовка 30x для перенаправления

3 голосов
/ 14 мая 2009

Почему бы просто:

header('Location: /');
3 голосов
/ 14 мая 2009

С PHP документ :

'HTTP_HOST': содержимое заголовка Host: из текущего запроса, если он есть.

Мне кажется, что это значение отправляется из браузера клиента, и, поскольку клиент может изменить заголовки запроса, я думаю, что лучше использовать SERVER_NAME:

'SERVER_NAME' Имя хоста сервера, под которым текущий Сценарий выполняется. Если скрипт работает на виртуальном хосте, это будет значение, определенное для этого виртуального хоста.

Поэтому я думаю, что правильный способ сделать это:

header("Location: http://{$_SERVER['SERVER_NAME']}/");
die();

Комментарий к «Местоположению: /»

Как указано в Определения полей заголовка перенаправления через заголовок Location должны предоставляться с абсолютным URI, включая http://www.servername.com/redirect/to/this/resource.html,, а не просто /redirect/to/this/resource.html. (Но он работает и с перенаправлением на /, но это не на 100% правильно).

РЕДАКТИРОВАТЬ : С июня 2014 года можно использовать как абсолютные, так и относительные URL. См. RFC 7231 , который заменил старый RFC 2616 , где разрешены только абсолютные URL.

0 голосов
/ 13 августа 2017

Я использую это во всех моих программах разработки, в каждом каталоге, содержащем непубличные скрипты ...

<?php $url = 'http://' . $_SERVER['HTTP_HOST']; header('Location: ' . $url, true, 301);?>

0 голосов
/ 14 мая 2009

Функция realpath работает в файловой системе и возвращает канонизированный абсолютный путь к файловой системе.

Но вам нужен URI. Итак, попробуйте это:

header("Location: http://".$_SERVER['HTTP_HOST']."/");
exit;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...