Нам записали php приложение в платформе зенда и задаемся вопросом, каков был бы лучший способ, если бы мы хотели сохранить наших пользователей зарегистрированными больше дня, например, недели или еще больше.
Нам нужны сессии для этого? (табличное пространство использования и память?) или лучше работать с cookie? (безопасность?)
HTTP не имеет состояния, что означает, что веб-сервер забудет, кто вы, после того, как он обработал ваш запрос. Сессии обходятся стороной. При использовании сеансов браузер и сервер будут обмениваться идентификатором по каждому запросу, который позволяет веб-серверу подключать ранее сохраненные данные к этому конкретному запрашивающему.
Идентификатор обычно хранится в файле cookie. Установите срок действия cookie сеанса через одну неделю, и вы готовы к тому, что пользователи будут оставаться в системе в течение недели.
См.
«Запомнить меня» - всегда дыра в безопасности, что бы вы ни использовали - файл cookie или сеанс - кто-то может (теоретически ) украсть cookie и, таким образом, войти в учетную запись без пароля. Есть способы повысить безопасность, разрешив отзыв только с одного и того же IP-адреса. Файлы cookie, AFAIK, менее безопасны, однако это зависит от того, как вы реализуете аутентификацию. Например, сохраняя хэш пароля в файлах cookie, вы почти даете злоумышленнику настоящий пароль (который нельзя использовать в других веб-приложениях), поскольку существуют словари для получения простых паролей из хеша. Соление хеша не сильно помогает.
В общем, сессия - самый простой и удобный способ. Используйте таблицы, если вы используете более одного веб-сервера для приложения, в противном случае сеансы на диске в порядке.
Строго говоря, вам не нужны сессии. Вы путаете две вещи:
Таким образом, cookies используются для двух целей - для хранения недолговечного (в течение нескольких минут или часов) идентификатора сессии и для хранения учетных данных пользователя в течение нескольких дней/недель/месяцев.