Задать вопрос
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);
  • Вопрос задан
  • 237 просмотров
Подписаться 1 Простой 9 комментариев
Решения вопроса 1
kawabanga
@kawabanga
1) Получать с сервера ссылку, а не подставляя ее в js.
2) Записывать куда то определенный hash на открытие страницы
https://мойсайт.ru/страница-благодарности.php?hash=123 и потом гасить его, чтобы человек не мог повторно открыть страницу.

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

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

Похожие вопросы
FoodSoul Калининград
от 160 000 до 250 000 ₽
BGStaff Москва
До 300 000 ₽
Greenway Global Новосибирск
от 150 000 до 250 000 ₽