По умолчанию NHibernate не будет кэшировать что-либо между сессиями. Если ваши сеансы недолговечны (по запросу), вам не о чем беспокоиться.
Если вы используете кеширование второго уровня или кеширование запросов, вам может потребоваться очистить кеш вручную. SessionFactory.Evict или SessionFactory.EvictQueries должны помочь в этом. Перезапуск приложения также должен сделать это, но это, вероятно, не тот ответ, который вы ищете.
В приложении ASP.NET общее использование, которое я видел, это создание одного SessionFactory для приложения и создание нового Session для каждого запроса.
SessionFactory требует времени для инициализации, является поточно-ориентированным и требует инициализации только один раз.
Сессии не являются поточно-ориентированными и довольно быстро создаются.
Все, что хранится в HttpContext, будет действительным только для длины запроса. Хранение сеанса в контексте является нормальным и должно дать вам желаемый результат. SessionFactory обычно хранится в статической переменной и будет работать столько же времени, сколько приложение.
См. класс NHIbernateHelper здесь для примера.