Как лучше хранить город пользователя, если на него завязанно куча всего, включая отображения контента?
В БД не выйдет ибо юзер может быть вполне неавторизованным. При этом есть довольно критичный контен, который как раз и будет зависеть от того, какой город выберет юзер из выпадающего меню
Не вариант, если неавторизованный пользователь захочет поменять город, то ему придется еще раз перезагрузить страницу. Потому что PHP код выполняется сначала, а потом только обновятся Куки.