[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Защита формы от повторной отправки
Страницы: 1, 2
Raymond
Читал, что обычно для такой защиты используется следующая схема:

- создается переменная сессии с уникальным значением
- к форме добавляется скрытое поле с этим уникальным значением
- в обработчике формы сверяются значения из сессии и из скрытого поля
- если все совпадает, то обновляем сессионное значение и выполняем необходимые процессы. Если нет - выдаем ошибку или что-нибудь по своему вкусу.

Но при таком подходе появляется проблема, когда пользователь открывает вторую вкладку на сайте, и форма из первой выдаст ошибку.

Подскажите, что с этим можно сделать?
arbuzmaster
После ошибки - Сообщить пользователю, что теперь и вторая форма не работает! biggrin.gif Пусть закроет все нахрен и идёт спать, видимо сегодня ни его день!
Я вот не пойму, Вы хотите что бы форма не отправлялась повторно, но при это хотите сделать 2 одинаковые формы с возможностью их одновременной отправки, зачем ?

_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
AllesKlar
Raymond
if(!empty($_POST)) {
$_SESSION['POST'] = $_POST;
header('location: form_handler.php');
exit;
}


//form_handler.php
if(empty($_SESSION['POST'])) {
exit;
}

$post_data = $_SESSION['POST'];
$_SESSION['POST'] = array();
...........



_____________
[продано копирайтерам]
twin
Только вот зачем сессию мучать?

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
AllesKlar
Цитата (twin @ 26.04.2017 - 03:37)
Только вот зачем сессию мучать?

- она для этого была создана, чтобы мучаться с промежуточными данными
- твой вариант?

_____________
[продано копирайтерам]
twin
Цитата (AllesKlar @ 26.04.2017 - 06:47)
она для этого была создана, чтобы мучаться с промежуточными данными
Она была создана как более защищенный вариант кукисов. А тут чего защищать?

Вот давай рассуждать логически. Мы организовали сессию. Как её идентифицировать? А тем же кукисом или GET. Какой смысл прятать рандомную уникальную строку, если её потом нужно идентифицировать по рандомной уникальной строке. smile.gif Для того, чтобы еще сервер напрячь лишними файлами?

Мой вариант- GETпараметр. Не мудрствуя лукаво. Ибо это никакая не секретная информация. Ну или кукис на худой конец.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
AllesKlar
twin
Речь же не о том. Речь о том, как предотвратить повторную отправку формы.
Форма отправляется POST.
Браузер перешел на обработчика формы.
Я жмакаю F5, форма отправляется повторно, не важно с GET параметром или без него.


... или я вообще не понял, о чем ты biggrin.gif

_____________
[продано копирайтерам]
twin
Я вот про это:
Цитата (Raymond @ 25.04.2017 - 17:47)
- создается переменная сессии с уникальным значением
- к форме добавляется скрытое поле с этим уникальным значением
- в обработчике формы сверяются значения из сессии и из скрытого поля
- если все совпадает, то обновляем сессионное значение и выполняем необходимые процессы. Если нет - выдаем ошибку или что-нибудь по своему вкусу.
Вообще это больше похоже на защиту от CSRF. Ну и за одно от повтора. Так то все верно описано, только токен не обязательно в сессию прятать. Собственно как и с редиректом. Сессия там совсем не нужна. Просто сбрасывается POST и обновляется токен.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
AllesKlar
Цитата (twin @ 26.04.2017 - 09:16)
Сессия там совсем не нужна. Просто сбрасывается POS

покажи

_____________
[продано копирайтерам]
twin
Чего показать? Всё тоже самое, только вместо сессии кукис.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
AllesKlar
Цитата (twin @ 26.04.2017 - 10:22)
Всё тоже самое, только вместо сессии кукис.

Т.е. данные из POST складывать в кукисы?
А если их у меня там несколько метров?
Это значит, сначала POST- ом отправить на сервер, потом, фактически, этот же объем скачать с сервера, чтобы положить их в кукисы, а потом еще раз тот же объем отправить на сервер.

Не эффективненько как-то получается smile.gif
Помимо прочего, засирать пушить в браузер пользователю Х Мб. данных как-то не красиво, могут и в морду дать smile.gif

_____________
[продано копирайтерам]
twin
Цитата (AllesKlar @ 26.04.2017 - 09:48)
Т.е. данные из POST складывать в кукисы?
Зачем вообще куда то складывать? Я чет не понимаю... С другой стороны, складывать мегабайты в сессию тоже не лучшая затея. И главное, ну ладно бы действительно CSRF боялись, а тут всего навсего F5.

Почему нельзя проверить токен и потом обработать данные? Это примерно как с каптчей. Только сравнивать не с сессией, а с кукой. Или GET. Или вообще отдельным заголовком можно, если REST.

Просто POST сбросить, так и токен не нужен. Не понимаю, зачем столько сложностей.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
VeRTak
обычный redirect нет? :lol: :lol: :lol:


header('Location: http://www.example.com/');
AllesKlar
Цитата (VeRTak @ 26.04.2017 - 12:35)
обычный redirect нет? :lol: :lol: :lol:


header('Location: http://www.example.com/');

Откуда POST данные будешь брать в пункте назначения редиректа?

_____________
[продано копирайтерам]
VeRTak
AllesKlar Речь ведь идет просто о повторной отправки формы. Как уже говорилось f5. Отработал скрипт, далее redirect. Попали на страницу какую нужно, уже с пустым постом. Что не так? Или я где то не так понимаю ph34r.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.