Сомнения по использованию: header("Location: url");

Гриша К.

Новичок
Сомнения по использованию: header("Location: url");

Здравствуйте.
У меня есть сомнения в использовании функции редиректа - header("Location: url");
Я все думаю, а может ли быть такое, что по обоснованным причинам, в каком либо браузере эта функция работать не будет, или просто будут такие пользователи, у которых какие-нибудь уникальные установки и у них такая функция не будет работать?

У меня есть несколько страниц на которые могут заходить зарегестрированные пользователи, мне было бы удобно, еслибы при заходе на эту страницу при отстутствии переменной сеанса пользователя, пользователь перенаправлялся на страницу ввода логина и пароля.
PHP:
if (@$_SESSION['user']==false)
header("Location: " . $_SERVER['PHP_SELF'] . 'login.php');
А то я представляю, что некоторые пользователи будут заходить на страницу, а перенаправляться они не куда не будут и страница будет пустая, ух сразу эти мысли бесить начинают.
А задумался я над этим, после того, как решил посмотреть как это делается в скриптах phpbb форума и когда увидел, что там куча проверок и разных вариантов редиректа.

-~{}~ 08.03.06 02:32:

-------------------------------
Только что в голову пришло:
только вот я не знаю, если не срабатывает функция редиректа, то вот что происходит, остаюсь я на текущей странице или уменя получается какая-то пустая страница.

PHP:
if (@$_SESSION['user']==false) {
header("Location: " . $_SERVER['PHP_SELF'] . 'login.php');
echo <a href="'. $_SERVER['PHP_SELF'] . 'login.php">вы не вошли в систему</a>;
include ('footer.php');
exit;
}
такой вариант подойдет, если редирект не сработал, и я остался на текущей странице.
 

alekciy

Новичок
Чисто теоретически ни чего не мещает написать пользователю браузер, который не будет поддерживать это раздел HTTP спецификации. Да и кроме того, не все старые браузеры могут делать редирект. Но все современные браузеры поддерживают его, следовательно пользователь попадёт куда нужно.

Хотя более разумно на странице редиректа добавить строку с тегом A по клику на который пользователь перейдет на нужну тебе страницу. Я лично так делаю. (неужели не приходилось встречать в сети сайты с надписью на одной из страниц: "Если ваш браузер не поддерживает автоматический переход нажмите сюда"????).

Код:
<html>
<head>
<meta HTTP-EQUIV="Refresh" Content="0; URL=%url%">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body style="text-align: center;">
Если Вы видите эту надпись, то ваш браузер не поддерживает автоматический переход.
Нажмите <a hreh="'login.php">сюда<a> для входа.
</body>
</html>
 

garlian

Новичок
Есть функция headers_sent (), которая проверяет отпправлены или нет заголовки. Вот от неё и можешь плясать.
 

Mich

Продвинутый новичёк
Дело было вечером, делать было нечего.
 

Гриша К.

Новичок
alekciy, спасибо за ответ.
garlian, спасибо за совет, но вобщем мне уже все ясно и я больше склоняюсь к примеру alekciy.

Но Еще остался не уесненный для меня вопрос.

Предположим у меня страница
profile.php
PHP:
<?php
//Здесь к пример содержится код страницы от <html> до <body>
include('header.php')

//Проверяем условие и делаем редирект, если условие выполняется
if (@$_SESSION['user']==false) { 
header("Location: " . $_SERVER['PHP_SELF'] . 'login.php'); 
echo <a href="'. $_SERVER['PHP_SELF'] . 'login.php">вы не вошли в систему</a>; 
include ('footer.php'); 
exit; 
}


//.......................... Здесь код страницы


//Здесь к примеру содержится </body></html>
include('footer.php')
?>
И вот если в данном случае у меня не сработает редирект, то меня страница будет состоять из следующих данных, это так?
(представляю как бы не код php, а уже его вывод в html)

Код:
include('header.php');

echo <a href="'. $_SERVER['PHP_SELF'] . 'login.php">вы не вошли в систему</a>;
 
include ('footer.php');
-~{}~ 08.03.06 02:53:

Mich, меня этот вопрос очень сильно обеспокоил!
 

Spear

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

vovanium

Новичок
А то я представляю, что некоторые пользователи будут заходить на страницу, а перенаправляться они не куда не будут и страница будет пустая, ух сразу эти мысли бесить начинают.
У тебя что сайт клуба любителей антикварных броузеров?
Вот любят же некоторые сами себе проблему из пальца высасывать...
 

Гриша К.

Новичок
Да уж этот header Меня сбесил,

В таком варианте редиректа не происходит, ему ненравится присутствие строчек include('header.html') и include ('footer.html');
А так как я часто вижу на многих сайтах, что у них учитывают то то header может не рсаботать, я начинаю думать, что это происходит нередко.

А раз я не смогу использовать свои header и footer, то ссылку о переходе на новую страницу, я буду размещать на пустой странице.
Вот меня сбесила функция header, 4 часа потратил на эту тупую функцию.

include('header.html')

//Проверяем условие и делаем редирект, если условие выполняется
if (@$_SESSION['user']==false) {
header("Location: " . $_SERVER['PHP_SELF'] . 'login.php');
echo <a href="'. $_SERVER['PHP_SELF'] . 'login.php">вы не вошли в систему</a>;
include ('footer.html');
exit;
}

-~{}~ 08.03.06 04:18:

vovanium, Spear, ну все таки ваши последнии сообщения меня успокоили.
 

Andreika

"PHP for nubies" reader
Гриша К.
так как я часто вижу на многих сайтах, что у них учитывают то то header может не рсаботать,
ой, да у тя телепатические способности!! видишь скрипты на расстоянии!!
 

Фанат

oncle terrible
Команда форума
ух сразу эти мысли бесить начинают.
с этой проблемой не сюда, а к психиатру.
или просто будут такие пользователи, у которых какие-нибудь уникальные установки
это их проблемы.
и у них такая функция не будет работать?
в этом случае у них не будет работать половина сайтов.
А то я представляю, что некоторые пользователи будут заходить на страницу, а перенаправляться они не куда не будут
на сайте форма обратной связи есть? емейл для контактов? вот когда такой случай произойдёт - они тебе напишут.
И вот в этом случае можешь начинать сходить с ума, беситься, писать истерики на форум.
Только что в голову пришло:
if (@$_SESSION['user']==false) {
header("Location: " . $_SERVER['PHP_SELF'] . 'login.php');
echo <a href="'. $_SERVER['PHP_SELF'] . 'login.php">вы не вошли в систему</a>;
молодец.
тебе в голову пришло то же самое, что написано (сюрприз!) в стандарте.
А так как я часто вижу на многих сайтах, что у них учитывают то то header может не рсаботать,
ты видишь НЕ ЭТО.
С ЧЕГО ТЫ ВЗЯЛ, что этот текст имеет хоть какое-то отношение к header?
 

Гриша К.

Новичок
Andreika
SiMM
Фанат
Спасибо за ответы. Вот нельзя ночью сидеть и что-то решать, всегда все непойми как выходит и все бесит. Сегодня посидел, подумал, нашел нормальный вариант, для сопостовления header() и include(), и для вывода в своем варианте, так что все впорядке.

Да, и поповоду других сайтов, у них скорее всего стоит редирект в <head></head>, с интервалов например 5 секунд.
Потому что я посмотрел, вроде как для header() нельзя ставить время редиректа.
 

Гриша К.

Новичок
vadim. а не могли бы вы мне написать пример, или ссылку, как это реалтзовать.
Например здесь http://ru.php.net/manual/ru/function.header.php я не нашел такого варианта.
 

vadim

Guest
Вот так например:
header("Refresh: 5; URL=\"url.php\"");
 

SiMM

Новичок
vadim, а с чего вы решили, что ВСЕ браузеры это будут хавать?
 

Гриша К.

Новичок
vadim, спасибо за пример. Но наверное с этим могут быть проблемы, раз SiMM говорит, лучше тогда не буду использовать такой вариант.
 

vadim

Guest
Берут IE,OPERA,FIREFOX,NETSCAPE

Остальные вы правы: я не могу судить, потому что остальные браузеры мне не интересны (изза их низкой доли на рынке)
 

Гриша К.

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