Sessions и страницы

Добрый день!
Возникла следующая необходимость: сделать ограничение на количество обновлений страницы. Чтобы у посетителя не было возможности судорожно зажать кнопку F5 и повесить сайт (на странице есть sql-запрос).
Есть ли возможность со страницы .tpl получить данные из сессии? Количество обновлений страницы, к примеру. Либо к этой странице заинклудить php-файл с кодом, который будет выводить количество обновлений страницы?

Есть зарезервированная переменная

{$smarty.session}

1 лайк

Берите эти данные через контроллер. При обновлении страницы она будет приходить.
Или как и сказал @ecomlabs через {$smarty.session} она должна выводить глобальные переменные.

1 лайк

А в чем проблема. У вас sql запрос выполняется каждый раз при обновлении страницы?

вообще если подумать, вам надо js какой-нибудь который бы отлавливал F5. Ctrl+R итп и сбрасывал бы их если не прошел определенный интервал времени. Если через php файл, это не помещает пользователю отправить запрос на получение страницы, но помешает серверу ее отдать, результат понятен.

1 лайк

Думаю, то что надо топистартеру и хостинг может включить по запросу

1 лайк

У нас облачный сервер. По ресурсам всё хорошо, они есть.

В итоге сделал так, чтобы при запросе страницы счётчик записывал в таблицу количество просмотров страницы с заходящего ip. Если превышает 5, то создаётся текстовый файл с ip в названии и запись удаляется из таблицы. Крон каждую минуту проверяет файлы по дате создания и по достижению 5 минут - удаляет с сервера.

@Ltim SQL действительно выполняется каждый раз при входе на страницу, он подгружает динамические данные из JOIN запроса.
Однако теперь, после написания ограничителя, после 5 обновлений страницы в течении 5 минут - на странице пишет “Если данные на странице не отображаются, то скорее всего Вы часто обновляли страницу и сработала защита.”.

По другому, увы, не справился.

1 лайк

Ну это плохая практика. Можно было сделать так чтобы при заходе вы выполняете SQL запрос и делаете кеширование. Например на Redis поставляете TTL и при каждом следующем обновлении страницы достаете оттуда. При каждом обновлении страницы делать SQL запрос плохая практика. Ну или можно написать глобальный js который будет отлавливать нажатие F5. В интернете таких решений думаю много. Но лучше смотрите в сторону кеша. cscart кеширует вроде так Registry::registerCache можете поискать в файлах. Но лучше сделать свой способ кеширования.