ограничить страницу без переменной, открывать только при переходе со страницы или сайта - PullRequest
1 голос
/ 09 января 2020

page-one. php code

<?php
//page-one.php
session_start();
$_SESSION['page_one'] = time();
?>
hello this is page 1 go to page 2

<a href="www.domain.com/page-two.php">Page 2</a>

page-two. php code

<?php
//page-two.php
session_start();

//Check to see if session variable exists.
if(!isset($_SESSION['page_one'])){
    //Does not exist. Redirect user back to page-one.php
    header('Location: 404.php');
    exit;
} ?>

this is page 2

Работает отлично, но у меня есть 2 вопроса:

  1. что, если я удаляю первую страницу bcz, я хочу показать страницу 2 всем посетителям на странице 2, щелкнув ссылку

  2. или что, если пользователь идет на второй странице через google.com, в этом случае вторая страница будет передавать переменную page_one

1 Ответ

1 голос
/ 09 января 2020

Это не имеет особого смысла, но для ваших конкретных c вопросов:

if(!isset($_SESSION['page_one']) &&
   strpos($_SERVER['HTTP_REFERER'], 'google') === false &&
   strpos($_SERVER['HTTP_X_FORWARDED_FOR'], 'google') === false &&
   file_exists('page-one.php')
{
    header('Location: 404.php');
    exit;
}
  • Проверьте, не установлена ​​ли переменная сеанса
  • Проверьте, если HTTP_REFERER не google
  • Проверьте, не HTTP_X_FORWARDED_FOR не google
  • Проверьте, не был ли page-one.php удален

$_SERVER['HTTP_REFERER'] не является надежным, как это может быть неправильно, прокси-сервер или пустой, и $_SERVER['HTTP_X_FORWARDED_FOR'] не гарантированно будет установлен или надежен.

Имея в виду предыдущие предостережения, вы можете увидеть, если кто-то пришел с другого сайта, проверив :

if(!isset($_SESSION['page_one'] &&
   !isset($_SERVER['HTTP_REFERER'] &&
   !isset($_SERVER['HTTP_X_FORWARDED_FOR'])
{
    header('Location: 404.php');
    exit;
}

Если вы добавите параметр get ко всем ссылкам, тогда будет проще:

<a href="www.domain.com/page-two.php?link">Page 2</a>

Тогда:

if(!isset($_SESSION['page_one'] && !isset($_GET['link'))
{
    header('Location: 404.php');
    exit;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...