Здравствуйте! <br/> Я столкнулся с проблемой: не удается ограничить прямой доступ к странице благодарности. <br/> Как можно реализовать так, чтобы пользователь, заполнивший контактную форму, не имел возможности скопировать ссылку и зайти на страницу благодарности через прямую ссылку? <br/> <br/> Код php: <br/> <br/> <pre><code class="php"><?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"
Для того чтобы ограничить прямой доступ к странице благодарности после заполнения контактной формы, можно использовать несколько решений. Наиболее распространённое из них заключается в использовании сессий. Вот пример, как это можно реализовать:
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. <br/> 2) Записывать куда то определенный hash на открытие страницы <br/> <a href="https://xn--80arbjktj.ru/%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0-%D0%B1%D0%BB%D0%B0%D0%B3%D0%BE%D0%B4%D0%B0%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8.php?hash=123" rel="nofollow">https://мойсайт.ru/страница-благодарности.php?hash=123</a> и потом гасить его, чтобы человек не мог повторно открыть страницу. <br/> <br/> Возможно просто рендер страницы благодарности вместо формы отрисовать после события успешной отправки формы.