Да, я верю, что это правильно.
Если вы сохраняете сеансы в базе данных, то существует агент на сервере Sql, который вызывает эту процедуру каждую минуту или около того:
DECLARE @now datetime
SET @now = GETUTCDATE()
DELETE ASPStateTempSessions WHERE Expires < @now
Триггер для сеанса не истек. Допустим, что это было спусковым крючком, где это может быть? Нет места, чтобы поместить этот триггер в одиночку, чтобы понять, что сессия истекла, и автоматически удалить себя.
С другой стороны, вы можете не создавать таймер, а, когда пользователь запрашивает страницу, каждые 1-2 минуты запускать функцию для удаления просроченных страниц.
Таким образом, вы делаете триггер из пользовательского вызова, но вы должны запускать его только раз в 1-2 минуты, используя какую-то блокировку, и проверять последний запуск.
Надеюсь, это поможет.