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

Здравствуйте! <br/> Я столкнулся с проблемой: не удается ограничить прямой доступ к странице благодарности. <br/> Как можно реализовать так, чтобы пользователь, заполнивший контактную форму, не имел возможности скопировать ссылку и зайти на страницу благодарности через прямую ссылку? <br/> <br/> Код php: <br/> <br/> <pre><code class="php">&lt;?php
if (isset($_POST['contactFF'])) {
    $to = "мойсайт@почта.ру"; // поменять на свой электронный адрес
    $from = $_POST['contactFF'];
    $subject = "Заполнена контактная форма с " . $_SERVER['HTTP_REFERER'];
    $message = "Имя: " . $_POST['nameFF'] . "\nEmail: " . $from . "\nIP: " . $_SERVER['REMOTE_ADDR'] . "\nСообщение: " . $_POST['messageFF'];
    $boundary = md5(date('r', time()));
    $filesize = '';
    $headers = "MIME-Version: 1.0\r\n";
    $headers .= "From: " . $from . "\r\n";
    $headers .= "Reply-To: " . $from . "\r\n";
    $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
    $message = "
Content-Type: multipart/mixed; boundary=\"$boundary\"

--$boundary
Content-Type: text/plain; charset=\"utf-8\"
Content-Transfer-Encoding: 7bit

$message";

    for ($i = 0; $i &lt; count($_FILES['fileFF']['name']); $i++) {
        if (is_uploaded_file($_FILES['fileFF']['tmp_name'][$i])) {
            $attachment = chunk_split(base64_encode(file_get_contents($_FILES['fileFF']['tmp_name'][$i])));
            $filename = $_FILES['fileFF']['name'][$i];
            $filetype = $_FILES['fileFF']['type'][$i];
            $filesize = $_FILES['fileFF']['size'][$i];
            $message .= "

--$boundary
Content-Type: \"$filetype\"; name=\"$filename\"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=\"$filename\"

$attachment"
  • 22 октября 2024 г. 5:02
Ответы на вопрос 3
Для того чтобы ограничить прямой доступ к странице благодарности после заполнения контактной формы, можно использовать несколько решений. Наиболее распространённое из них заключается в использовании сессий. Вот пример, как это можно реализовать:

1. **Создание сессии после отправки формы**: В вашей PHP-скрипте, который обрабатывает форму, добавьте код, который устанавливает сессионную переменную, указывающую на то, что форма была успешно отправлена.

2. **Проверка сессионной переменной на странице благодарности**: На странице благодарности проверяйте, установлена ли соответствующая сессионная переменная. Если она не установлена, перенаправляйте пользователя на главную страницу или на другую страницу.

Пример реализации:

### Скрипт обработки формы (например, `submit_form.php`):

```php
session_start();

if (isset($_POST['contactFF'])) {
    // Ваш код для обработки формы и отправки данных
    // ...

    // Устанавливаем сессионную переменную, чтобы указать, что форма была отправлена
    $_SESSION['form_submitted'] = true;

    // Перенаправляем на страницу благодарности
    header("Location: thank_you.php");
    exit();
}
```

### Страница благодарности (например, `thank_you.php`):

```php
session_start();

if (!isset($_SESSION['form_submitted'])) {
    // Если пользователь пришел напрямую, перенаправляем его, например, на главную страницу
    header("Location: index.php");
    exit();
}

// Выводим содержимое страницы благодарности
echo "Спасибо за ваше сообщение!";
  
// После отображения страницы можно очистить сессионную переменную, если нужно
unset($_SESSION['form_submitted']);
```

### Что происходит:

1. Когда пользователь отправляет форму, срабатывает обработчик формы, который устанавливает сессионную переменную `form_submitted`.
2. Пользователь перенаправляется на страницу благодарности (`thank_you.php`).
3. На странице благодарности проверяется наличие сессионной переменной. Если её нет, это значит, что пользователь зашёл на страницу напрямую, и он будет перенаправлен, например, на главную страницу.
4. После отображения страницы благодарности сессионная переменная может быть очищена, чтобы пользователь не мог повторно открыть страницу, если обновит её.

Это простой и эффективный способ блокировать прямой доступ к странице благодарности.
Поставьте проверку реферера на той странице, где хотите закрыть.
1) Получать с сервера ссылку, а не подставляя ее в js. 
2) Записывать куда то определенный hash на открытие страницы
https://мойсайт.ru/страница-благодарности.php?hash=123 и потом гасить его, чтобы человек не мог повторно открыть страницу.

Возможно просто рендер страницы благодарности вместо формы отрисовать после события успешной отправки формы.
Похожие вопросы