Задать вопрос
@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 только. Может кто-то подскажет почему так происходит?
  • Вопрос задан
  • 84 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 3
anton_reut
@anton_reut
Начинающий веб-разработчик
если пользователь нажмет кнопку несколько раз, то данные будут отправляться так же, по несколько раз.

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

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

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

Похожие вопросы