Помните, что куки могут быть отключены в браузере. Используйте переменную $ _SESSION вместо куки.
В моем классе аутентификации все пользователи хранятся в базе данных с уровнем доступа. На каждой странице класс Authentication использует переменную $ _SESSION, чтобы получить зарегистрированного пользователя и извлечь его из базы данных в объект пользователя. Если никто не вошел в пользовательский объект по умолчанию для гостей, используется вместо.
В генерации HTML я проверяю только уровень доступа перед генерацией "защищенных" данных.
if ($User->AccessLevel >= 30) {
// stuff only available to users with access level 30 and higher
}