Anna_Polyakovich
@Anna_Polyakovich
Начинающий дизайнер, осваиваю html, css, js

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

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

<?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 < 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";
        }
    }
    $message .= "
--$boundary--";

    if ($filesize < 10000000) { // проверка на общий размер всех файлов. Многие почтовые сервисы не принимают вложения больше 10 МБ
        mail($to, $subject, $message, $headers);
        // Перенаправление на страницу благодарности
        header('Location:страница-благодарности.php');
        exit;
    } else {
        echo 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.';
    }
}

// Проверка реферера
if (!isset($_SERVER['HTTP_REFERER']) || strpos($_SERVER['HTTP_REFERER'], 'https://мой сайт.ru') === false) {
    header('Location: https://мойсайт.ru'); // Перенаправление на страницу формы
    exit;
}
?>


document.getElementById('feedback-form').addEventListener('submit', function(evt) {
    var http = new XMLHttpRequest(), f = this;
    evt.preventDefault();
    http.open("POST", "файл-с-кодом-обработчика-формы.php", true);
    http.onreadystatechange = function() {
        if (http.readyState == 4) {
            if (http.status == 200) {
                // Успешный ответ. Перенаправляем пользователя.
                window.location.href = 'https://мойсайт.ru/страница-благодарности.php';
            } else {
                alert('Извините, произошла ошибка при отправке данных.');
            }
        }
    };
    http.onerror = function() {
        alert('Извините, данные не были переданы');
    };
    http.send(new FormData(f));
}, false);
  • Вопрос задан
  • 158 просмотров
Пригласить эксперта
Ответы на вопрос 2
kawabanga
@kawabanga
1) Получать с сервера ссылку, а не подставляя ее в js.
2) Записывать куда то определенный hash на открытие страницы
https://мойсайт.ru/страница-благодарности.php?hash=123 и потом гасить его, чтобы человек не мог повторно открыть страницу.

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

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

Войти через центр авторизации
Похожие вопросы