Защита от повторной отсылки данных формы
WEB всемогущий Июль 30th, 2009Сегодня писал небольшую php-шку, и наткнулся на один неприятный момент.
Скажем я делаю добавление каких-то данных в базу. Соответственно есть форма, есть submit. Жмем на submit, данные отправляются, и нам пишут, что все ок. Добавились ваши данные. А теперь жмем Ctrl+R или F5 и наши данные благополучно отправляются второй раз. Долго думал как этого избежать… придумал ![]()
Для защиты от повторной отправки данных будем использовать сессии.
Собственно вот код:
<?
session_start();
if (is_numeric($_SESSION['key']))
{
$s_key = $_SESSION['key'];
if ($_GET['key']!=$s_key)
if ($_POST['key']!=$s_key)
die(‘Данные устарели!!!’);
}
$key = rand(1000, 9999);
$_SESSION['key'] = $key;
echo preg_replace(«/[\r\n]+/»,»<br>»,print_r($_SESSION,true));
echo ‘<br><br><a href=»?key=’.$key.’»>next</a>’;
echo ‘<br><br><form method=»POST» action=»‘.$_SERVER['PHP_SELF'].’»><input type=submit><input value=’.$key.’></form>’;
?>
Смысл состоит в том, что каждый раз мы генерируем новый ключ. Сохраняем его в сессии и передаем как параметр (в данном случае неважно каким методом POST или GET). Если значение параметра не совпадает со значением из сессии, значит это повторные данные.
Вуаля!

Август 21st, 2009 - 18:32
Очень признателен, действительно полезная инфа.
Январь 2nd, 2010 - 20:41
хорошо! это помогает! спасибо!!!!
Январь 2nd, 2010 - 20:42
только можно еще проще: session_register(«savekey»);
и после обновления: session_unregister(«savekey»);
Январь 12th, 2010 - 3:18
Спасибо. Реально помогло.