Сегодня писал небольшую 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). Если значение параметра не совпадает со значением из сессии, значит это повторные данные.

Вуаля!