Добрый день!
Возникла следующая необходимость: сделать ограничение на количество обновлений страницы. Чтобы у посетителя не было возможности судорожно зажать кнопку F5 и повесить сайт (на странице есть sql-запрос).
Есть ли возможность со страницы .tpl получить данные из сессии? Количество обновлений страницы, к примеру. Либо к этой странице заинклудить php-файл с кодом, который будет выводить количество обновлений страницы?
Есть зарезервированная переменная
{$smarty.session}
Берите эти данные через контроллер. При обновлении страницы она будет приходить.
Или как и сказал @ecomlabs через {$smarty.session} она должна выводить глобальные переменные.
А в чем проблема. У вас sql запрос выполняется каждый раз при обновлении страницы?
вообще если подумать, вам надо js какой-нибудь который бы отлавливал F5. Ctrl+R итп и сбрасывал бы их если не прошел определенный интервал времени. Если через php файл, это не помещает пользователю отправить запрос на получение страницы, но помешает серверу ее отдать, результат понятен.
Думаю, то что надо топистартеру и хостинг может включить по запросу
У нас облачный сервер. По ресурсам всё хорошо, они есть.
В итоге сделал так, чтобы при запросе страницы счётчик записывал в таблицу количество просмотров страницы с заходящего ip. Если превышает 5, то создаётся текстовый файл с ip в названии и запись удаляется из таблицы. Крон каждую минуту проверяет файлы по дате создания и по достижению 5 минут - удаляет с сервера.
@Ltim SQL действительно выполняется каждый раз при входе на страницу, он подгружает динамические данные из JOIN запроса.
Однако теперь, после написания ограничителя, после 5 обновлений страницы в течении 5 минут - на странице пишет “Если данные на странице не отображаются, то скорее всего Вы часто обновляли страницу и сработала защита.”.
По другому, увы, не справился.
Ну это плохая практика. Можно было сделать так чтобы при заходе вы выполняете SQL запрос и делаете кеширование. Например на Redis поставляете TTL и при каждом следующем обновлении страницы достаете оттуда. При каждом обновлении страницы делать SQL запрос плохая практика. Ну или можно написать глобальный js который будет отлавливать нажатие F5. В интернете таких решений думаю много. Но лучше смотрите в сторону кеша. cscart кеширует вроде так Registry::registerCache можете поискать в файлах. Но лучше сделать свой способ кеширования.