Давайте начнем с того, что вы не можете отличить случайных обновлений от целевых обновлений. Таким образом, вы можете только решить вообще не разрешать обновления или, другими словами, требовать, чтобы каждая отправляемая форма была уникальной. Лучший способ сделать это - вставить в форму случайный токен.
<?php
$token = /* a randomly generated string */;
$_SESSION['_token'] = $token;
?>
<input type="hidden" name="_token" value="<?php echo $token; ?>" />
После каждой отправки вы аннулируете токен сеанса. Если токен в сеансе отличается от токена, отправленного с формой, вы можете удалить POST.
Комментарий: вы можете сделать это для каждого элемента. Например, здесь, в SO, у вас может быть открыто несколько окон вопросов и вы можете ответить на несколько вопросов одновременно. Вы можете создать токен для каждого вопроса, чтобы пользователь мог иметь несколько действительных токенов одновременно, но только один на вопрос.
Примером этого сценария будет вставка строки в таблицу регистрации. Вы бы хотели, чтобы эта операция выполнялась один раз.
В этом случае вам, вероятно, следует беспокоиться не о фактическом POST, а о согласованности данных как таковой. Вы должны иметь некоторую форму уникальной идентификации для каждого пользователя, например, его адрес электронной почты. Если адрес уже зарегистрирован в базе данных, вы больше не регистрируете пользователя. Это не зависит от того, почему пользователь пытался зарегистрироваться дважды (двойная отправка или реальная попытка регистрации).