Версия для печати
Журналы: Игорь_Vasinsky -> PHP во сне и на яву
16 марта 2010
 17:40   Зашита от F5 (повторная передача данных))
#1 Зашита от F5 (повторная передача данных))

Ранне почемуто этот момент меня мало интересовал, но сейчас решил уделить ему своё внимание.

О мерах: предотвращение повторной передачи данных методом $_POST (если пользователь не специально или предномеренно обновил страницу)

Знающим людям этот пример известен, а не знающим будет полезен.

Итак:

есть страница с формой (регистрация или авторизация - не суть)

Цитата
<form method='POST' action='post.php'>
<input type='text' name='login'>
<input type='pass' name='password'>
<input type='submit' value='пошёл !'>
</form>


есть страница куда эти данные отправляются (об обработки этих данных в целях безопасности я писать не буду - это другая тема)

Цитата
<?php
session_start();  // стартуем сессию
if (empty($_SESSION['post_ok'])){ // проверяем - если сессия пуста то
// получаем данные
// обрабатываем
// записываем
$post_ok = 'true';
session_register('post_ok');
}
else { // если сессия не пуста то:
echo "Ваши данные уже были переданы и записаны";
}
?>


Это только алгоритм, т.к. предназначение каждой формы может иметь специфический характер , например если форма регистрации - то ещё необходимо проверить - может такой логин уже занят.

P.S. МОЖНО НЕ ИСПОЛЬЗОВАТЬ СЕССИИ, А СДЕЛАТЬ РЕДИРЕКТ ЧЕРЕЗ HEADER и POST будут очищены.

Комментарии :2

Написал: UnWind - 08:11 20/03/2010
А не лучше ли сделать сравнение с последней записью в таблице ?
Т.е. логически это выглядит так:
Если последняя запись в БД, равна добавляемой, то выводиться текст "Вы уже добавляли такое сообщение!", если не равна - выполняется условие добавления и выводится сообщение "Ваше сообщение добавлено!". cool.gif

Написал: Игорь_Vasinsky - 00:30 21/03/2010
Цитата (UnWind @ 04:11 20/03/2010)
А не лучше ли сделать сравнение с последней записью в таблице ?



ну зачем же тревожить лишний раз mysql

лучше мы сделаем:

header('location: '. $_SERVER['PHP_SELF']);

но это далеко ещё не СПАМ контроль.


mJournal v1.05   © 2003-2004 by UriSoft and IBResource.ru