отключить повторный вызов с помощью getmethod () в php при обновлении страницы - PullRequest
0 голосов
/ 01 декабря 2009

Я новичок в PHP и, чтобы выучить язык и концепции, я работаю на веб-сайте электронной коммерции с корзиной для покупок и т. Д. На этом сайте у меня есть предметы, при щелчке по элементу идентификатор товара отправляется методом GET на страницу корзины покупок. Используя этот идентификатор, я добавляю товар в корзину (таблица в БД), и он отлично работает.

<a href="do_shoppingcart.php?id=<?php echo "$itm_id"; ?>">

Проблема в том, если пользователь нажимает кнопку обновления, товар снова добавляется в корзину. Вы думаете, что отключение кнопки обновления или кнопки F5 - хороший вариант? что я должен сделать, чтобы пользователь не мог добавить товар в корзину при обновлении страницы? В формах я заметил, что "(isset ($ _ POST ['Submit'])) {}" полезно, но для метода GET это не работает соответственно.

Ваша помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 01 декабря 2009

Самый безопасный способ (также полезный для предотвращения CSRF-атак) - добавить токен как скрытое поле в форму. Затем в сценарии обработки добавьте элемент в базу данных, только если этот токен еще не существует ...

Маркер может быть создан примерно так:

$token = sha1(uniqid());

Прилагается к вашей ссылке:

echo '<a href="process.php?id='.$id.'&token='.$token;

Затем при обработке вы запрашиваете в вашей базе данных строку с этим токеном.

SELECT 1 FROM table WHERE token='abc....'

Если этот запрос возвращает результат, больше ничего не обрабатывать ...

0 голосов
/ 01 декабря 2009

вы должны выполнять деструктивные действия с POST, резервировать GET для идемпотентных операций.

...