@nikitoshq

Как разрешить загрузку страницы только один раз?

Получается есть страница оформления заказа "simplecheckout" после чего по нажатию кнопки "Подтверждение заказа", перекидывает на страницу "success" и на этой странице происходить отправка данных о заказе в вайбер, получается проблема в том, что если пользователь нажмет кнопку несколько раз, то данные будут отправляться так же, по несколько раз. Не могу понять почему так происходит, т.к. unset сессии я делаю.
$order_id = $this->session->data['order_id'];	
unset($this->session->data['shipping_method']);
unset($this->session->data['shipping_methods']);
unset($this->session->data['payment_method']);
unset($this->session->data['payment_methods']);
unset($this->session->data['guest']);
unset($this->session->data['comment']);
unset($this->session->data['order_id']);
unset($this->session->data['coupon']);
unset($this->session->data['reward']);
unset($this->session->data['voucher']);
unset($this->session->data['vouchers']);
unset($this->session->data['totals']);

И работаю с переменной $order_id только. Может кто-то подскажет почему так происходит?
  • Вопрос задан
  • 83 просмотра
Решения вопроса 3
anton_reut
@anton_reut
Начинающий веб-разработчик
если пользователь нажмет кнопку несколько раз, то данные будут отправляться так же, по несколько раз.

Делаешь редирект через header location на главную например и всё.
Ответ написан
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Ну допустим unset() вы сделали, а как же сообщить PHP, что нужно сохранить состояние сессии?
В чистом PHP для этого есть session_write_close(), а вариант для opencart - ищите сами.
P.S. Кроме того простой unset() на данные внутри класса может и не сработать, это ведь класс...
Ответ написан
coderisimo
@coderisimo
А если в скрипте, который обрабатывает данные проверять наличие этого заказа в сессии, например ?
алгоритм :
получили данные например в POST, проверили есть ли данный заказа в сессии (как - вам виднее)
если его там нет - добавляете в сессию его айдишник ,отправляете заказ
если он там есть , то это дубль - ничего никуда не отправляете

Так же, можно, как доп. меру дисэйблить кнопку после однократного нажатия ))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы