Как реализовать доступ к странице только для тех, кто переходит с определенной страницы?

Все привет.
Подскажите, как можно сделать на php такое ограничение. На страницу sss.ru/1ndex.php можно попасть только по ссылке со страницы sss/bla.php
В общем я хочу направлять людей на страницу bla.php , а оттуда идет php редирект на страницу 1ndex.php и в таком случае посетитель видит содержимое. А если человек напрямую забивает в строке браузера sss.ru/1ndex.php то он переадресовывается на другую какую либо страницу например sss.ru/error.php

Пробовал вот это
<?php
if(!isset($_SERVER['HTTP_REFERER'])){
header('HTTP/1.0 404 Not Found');
exit();
}

if(!strstr($_SERVER['HTTP_REFERER'], "sss/bla.php ")){
header('HTTP/1.0 404 Not Found');
exit();
}

?>
Но почему то не показывается содержание страницы и не показывает ошибки.
Заранее спасибо.
  • Вопрос задан
  • 7990 просмотров
Решения вопроса 1
fenric
@fenric
@DrNemo прав, HTTP_REFERER доверять не стоит, я с лёгкостью обойду такую защиту от дураков, с сессиями попробовать можно, сделайте вот что:
Открываем файл bla.php, пишем:
session_start();

$_SESSION['access'] = TRUE;

Открываем файл 1ndex.php, пишем:
session_start();

if (! isset($_SESSION['access']))
{
    echo 'Your text of error.';
    exit(0);
}

unset($_SESSION['access']);


Это наверное то, что вам необходимо...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 7
DrNemo
@DrNemo
Если обе страницы в рамках одного сайта, то не проще ли реализовать это через сессию/куки?
На sss/bla.php создаем сессию, что просмотр разрешен.
На sss.ru/1ndex.php проверяем наличие сессии, если ее нет, делаем редирект на sss.ru/error.php
Если удалим сессию после показа sss.ru/1ndex.php, то вход на эту страницу будет возможен только со страницы sss/bla.php, иначе страница будет доступна в рамках жизни сессии.

П.С.: HTTP_REFERER не рекомендую доверять, подробнее php.net/manual/ru/reserved.variables.server.php
Ответ написан
Комментировать
@bossldv Автор вопроса
Да конечно можно через сессию куки но для меня это сложно, не смогу реализовать. Может есть какой нибудь пример? чтобы посмотреть
Ответ написан
@bossldv Автор вопроса
На могу понять, почему выдается пустая страница? 1ndex.php и этого Text your error. тоже не пишет.
Ответ написан
Комментировать
@bossldv Автор вопроса
Все супер спасибоо!!!
Ответ написан
Комментировать
fenric
@fenric
Вот вам абсолютно рабочий код, над ним и работайте, создаём 2 файла, 1.php и 2.php, открываем файл 1.php, и пишем в него следующее:

<?php

session_start();

$_SESSION['access'] = TRUE;

echo 'Открылся доступ к файлу <a href="2.php">2.php</a>';


Открываем файл 2.php, пишем в него следующее:

<?php

session_start();

if (! isset($_SESSION['access']))
{
	echo 'У вас нет доступа к этой странице, для того, чтобы его получить, перейдите на странциу <a href="1.php">1.php</a>.';
	
	exit(0);
}

unset($_SESSION['access']);

echo 'Поздравляем, у вас открыт доступ к этйо странице.';


Теперь, в браузере откройте файл 2.php, и вы получите тот результат, который вы ожидаете.
Ответ написан
@bossldv Автор вопроса
Да все работает, только когда писал <?php не работало, убрал php и оставил просто <? заработало. Почему так не знаю.
Ответ написан
@bossldv Автор вопроса
В первом файле я сделал так
<?php
session_start();

$_SESSION['access'] = TRUE;

header('Location: index2.php');

?>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы