spoilerДля реализации авторизации на сайте обычно применяют сочетание сессий и куки, при этом хранят и передают разные данные, чтобы обеспечить безопасность и удобство.
Как обычно хранится информация пользователя?
Сессии (например, в PHP через $_SESSION) хранятся на сервере. В них обычно сохраняют идентификатор пользователя, время последнего доступа и другую служебную информацию. На клиенте в cookie хранится только уникальный идентификатор сессии (например, session id). Именно по этому идентификатору сервер находит нужную сессию при обращении пользователя.
Куки (cookie) — это небольшие данные, которые браузер хранит на стороне клиента. Обычно в них не кладут пароли или чувствительную информацию без шифрования. Но могут хранить, например, токены для "запомнить меня" (persistent login), чтобы после закрытия браузера пользователь оставался авторизован.
Что именно хранят?
В cookie обычно хранится минимум информации: идентификатор сессии или токен (например, JWT).
В сессии на сервере — детальная информация о пользователе и его правах, состояние авторизации.
Что безопаснее?
- Никогда не храните пароли в куках — только хэшированные данные на сервере.
- Используйте сессии для хранения информации, привязанной к пользователю, а в куках — уникальные, сложные идентификаторы или токены.
- Желательно применять HTTPS, чтобы куки не перехватывались.
- Для повышения безопасности используют httpOnly и Secure флаги в куках, чтобы ограничить доступ к ним из JavaScript и передавать только по защищённому соединению.
- Также хорошие практики — ограничение времени жизни сессии, защита от CSRF и защита от XSS-атак.
Как реализуют авторизацию на примере?
- Пользователь вводит логин и пароль.
- Сервер проверяет корректность и создает сессию с уникальным идентификатором.
- Идентификатор сессии передается в куку браузера.
- При каждом запросе сервер смотрит куку, получает session id, загружает данные сессии и определяет пользователя.
- При использовании опции "запомнить меня" сервер может выдать длительный токен, хранящийся в куке, и сверять его с базой.
Таким образом, авторизация — это комбинация сессий и куки, где сессии хранят данные на сервере, а куки — минимальный идентификатор для связи сессии и клиента.
Это общепринятый и безопасный подход для авторизации, который используют такие ресурсы как ВКонтакте или крупные веб-сайты.