Делая это из SQL, используя простые команды SQL, вы можете получить количество элементов, выполненных за последний час, и, следовательно, нет необходимости использовать переменные сеанса (которые умрут, если пользователь сбросит свой сеанс)
Проверка количества "сообщений" для определенного элемента в текущем часе
SELECT
COUNT(*)
FROM
my_elements_table
WHERE
HOUR(createdon) = HOUR(NOW())
AND DATE(createdon) = CURDATE()
AND createdby = the_user_you_are_checking
Проверка количества "сообщений" для определенного элемента в прошедшем часе
SELECT
COUNT(*)
FROM
my_elements_table
WHERE
DATE_ADD(createdon, INTERVAL 1 HOUR) > NOW()
AND createdby = the_user_you_are_checking
Очевидно, адаптировать SQL на основе полей и таблиц базы данных, но у вас должна быть хорошая отправная точка для этого.