Не похоже, чтобы у вас были какие-либо проблемы с этим, но вас может заинтересовать мой ответ на этот вопрос .
Вообще говоря, сеанс является хорошим местом для кэширования данных, которые:
- относительно небольшой,
- Дорого получить, а
- Не нужно использовать вне сеанса данного пользователя
Звучит так, как будто вы соответствуете как минимум двум первым требованиям.
В одном проекте, над которым я работал, была потребность, аналогичная той, которую вы описываете, но многие пользователи в конечном итоге получили бы точно такое же меню, а создание самого меню было дорогостоящим, поэтому я разделил проблему на части, как это:
- Персональный идентификатор пользователя сохраняется в сеансе.
- MenuKeyRepository получит список идентификаторов клавиш пунктов меню, которые должны появиться для данного идентификатора человека, и вернет этот список как «MenuKey».
- MenuRepository будет генерировать фактическое меню на основе заданного MenuKey.
Эти два репозитория использовали скользящий кэш памяти, так что в большинстве случаев и кнопка меню, и само меню уже были созданы. Если новый пользователь входит в систему, но должен видеть те же пункты меню, что и какой-либо другой недавний пользователь, в первом хранилище должна быть создана клавиша меню, но фактическое меню уже кэшировано.
Я не знаю, будет ли этот подход иметь смысл для вас, но он есть, для чего он стоит.