Что нужно хранить в cookie для системы входа?

Что лучше хранить в cookie, чтобы сохранить постоянное состояние входа в систему?

Я видел много веб-сайтов (и начинающих обучающих программ!), Которые просто хранят в cookie что-то вроде validUser = 1. Ясно, что я мог бы подделать это, и веб-сайт подумает, что я действительный пользователь.

Если имя пользователя хранится в cookie, я мог бы маскироваться как любой пользователь, отправив куки-файл с его / ее именем пользователя в мой запрос.

Поэтому, если вы храните имя пользователя и пароль в файле cookie, я должен знать имя пользователя и пароль для входа. Фактически пользователь регистрируется автоматически – это похоже на то, что пароль был сохранен его браузером. Вместо того, чтобы каждый раз вводить учетные данные в ящики, браузер автоматически отправляет их с каждым запросом страницы.

Но разве это еще плохая идея? Хранение простого текстового пароля не является блестящей идеей, но именно так оно будет отправлено в данных POST при входе в систему. И кроме того, это может быть сохранено хеширование. Но я до сих пор не чувствую себя комфортно.

Возможно, файлы cookie не должны использоваться для хранения чего-либо, кроме идентификатора сеанса, а данные пользователя хранятся на самом сервере. Возможно, это более безопасное место, предполагающее, что сервер не используется.

Глядя на какое-то программное обеспечение с открытым исходным кодом, такое как программное обеспечение форума, они используют более сложную систему, но я не мог понять, что именно он делает, от скимминга кода.

Какова стандартная «лучшая практика»?

2 хорошие статьи:

Персистентная версия Cookie для входа в систему

Улучшенная постоянная версия cookie для входа в систему

Лучшей практикой будет использование СЕССИИ вместо COOKIE для использования данных. COOKIES используются для хранения общей информации, а не конкретной информации о пользователе, для чего используются СЕССИИ.

Лучшей практикой является хранение случайно сформированного идентификатора сеанса. Затем сеанс сохраняет идентификатор пользователя или все остальное, что вам нужно для хранения. В PHP метод session_start() автоматически генерирует идентификатор сеанса и файл cookie с именем PHPSESSID, поэтому вам нужно только беспокоиться о сохранении данных в массиве $ _SESSION, а не в файле cookie.

Единственное, что должно быть в cookie, это sessionid, сгенерированный PHP (и это делается автоматически при использовании сеансов). Вы не должны хранить что-либо в файле cookie, за исключением, возможно, запоминающегося имени пользователя для отметки «помнить меня».