У тебя в голове очень странная идея, что ислючения бываю только те, которые ты сам выбросил.
И что их надо обязательно поймать.
Понятно что для процедурного кода состоящего из двух функций, поймать исключение на месте почти равнозначно глобальному обработчику ошибок.
Но если подумать головой, и понять что исключение может возникнуть в любом месте программы, то надо позаботиться о глобальном обработчике ошибок. И тогда не нужно будет на каждый чих писать трай кетч.
для этого у тебя должен быть обработчик ошибок.
если у тебя какой-то из классов будет не найден, или база например сдохнет - что пользователь увидит?
а чем эта ситуация от выброшенного руками исключения?
чтобы тупо залогировать ошибку трай кетч не нужен.
$_SESSION - это переменная. Обычный массив.
Обращаться к нему так же, как к любому другому массиву. Но мы не знаем, в каком конкретно элменте этого массива у тебя лежит айди юзера. Этот вопрос уже не относится к РНР, а относится к структуре твоего приложения.
наверное на сайте другой код исполняется