Ваш подход определенно верен, но имеет одну фундаментальную проблему (которая, вероятно, является причиной создания файлов cookie): идентификация.
Как можно отличить пользователя A от пользователя B, не спрашивая имени пользователя и пароля? Файлы cookie предоставляют простой способ сделать это различие. Как только пользователь будет идентифицирован, ваши баллы станут полностью действительными.
Как правило, конфиденциальная информация не предназначена для хранения в файлах cookie. Такую информацию лучше всего хранить на стороне сервера (как вы указали).
Это уже сделано, иначе мы будем хранить имена пользователей, адреса и информацию о кредитной карте в файле cookie, а не в базе данных. Вы должны оценить, что имеет смысл хранить в базе данных по сравнению с тем, что имеет смысл хранить в виде файлов cookie. Производительность сервера, пропускная способность, масштабируемость - все это нужно иметь в виду. Помните, что чем больше мы храним на стороне сервера, тем больше нам придется доставить на стороне клиента.
Вы также упоминаете сеансы - сеансы представляют собой файлы cookie (вроде как).
Обычно мы используем файлы cookie, потому что мы не обязательно сохраняем в них какие-либо конфиденциальные данные. Если в вашем приложении есть конфиденциальные данные, с которыми вы не хотите, чтобы кто-либо возился, тогда непременно используйте все имеющиеся в вашем распоряжении инструменты на стороне сервера и БД, чтобы решить эту проблему, но не все приложения и реализации нуждаются в таком уровне безопасности в этих отношениях. Настройка файлов cookie предназначена для удобства, вот и все.
Конфиденциальная информация не должна содержаться в файлах cookie, я соглашусь с вами в этом. Он должен храниться где-то на стороне сервера, либо в плоском файле на самом сервере, либо в базе данных.
Что вам действительно нужно на клиентской машине, так это один небольшой файл cookie, содержащий какую-то неясную, трудно угадываемую ссылку на эти конфиденциальные данные.
Поздравляем! Вы только что заново изобрели сеансы!
(Веб-серверы можно настроить для хранения данных сеанса в базе данных, а не в плоских файлах на сервере, если вы предпочитаете такой способ.)