Что значит десятки-сотни строк кода? И вопрос "как поймать истечение сессии"? Так или иначе, в определённый момент вы запрашиваете сессию из базы, и проверить истекла она или нет, в этот самый момент, это совершенно дешево по ресурсам и решается строчкой кода.
Ну и раз вы за чистоту бд так боретесь, что готовы удалять сессии, что аж крон вам враг. То либо вы их не чистите вообще и они копятся мегабайтами, либо совершенно зря на этом зацикливаетесь.
И кто мешает сделать у пользователя(допустим таблица users) поле sid(в котором хранится id актуальной сесии). А sid в это случае - это ссылка на другую таблицу, где уже собственно вся информация по сессии доступна, и когда создана и всё остальное. Тут уже чистить особо ничего не надо.