Cookie и сессия в функции "запомнить меня" - PullRequest
3 голосов
/ 04 февраля 2010

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

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

Я также хотел бы знать, будет ли достаточно просто установить другую переменную сеанса в массиве сеансов, чтобы пользователь вошел в систему, или мне все еще нужно будет установить cookie?

Ответы [ 4 ]

4 голосов
/ 04 февраля 2010

Чтобы извлечь данные сеанса из вашей базы данных, необходим ключ. Это называется идентификатором сеанса.

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

Это происходит автоматически.

Единственная причина использовать сессию - если объем данных, которые вы хотите сохранить, превышает 4 КБ (ограничения браузера); или если время, необходимое для извлечения данных с вашего сервера, больше, чем чтение их из хранилища сеансов.

Если объем хранимых данных меньше 4 КБ, я настоятельно рекомендую вам сначала установить его в файле cookie. Я обычно храню такие вещи, как идентификатор пользователя, имя пользователя и несколько других атрибутов. Имейте в виду, что проверка значения файлов cookie является тривиальной задачей, поэтому эта информация должна быть зашифрована до обращения к клиенту.

Другое дело, если время запроса для извлечения необходимых данных из исходного источника невелико, то вместо того, чтобы поместить его в сеанс, выберите это. Таким образом, вы получаете его только тогда, когда вам это действительно нужно, а не при каждой загрузке страницы.

2 голосов
/ 04 февраля 2010

Меня всегда удивляло то, как, хотя я явно не устанавливаю cookie, он помещается в мой браузер.

Обработчик сеанса должен определить, к какому сеансу принадлежиткакой пользователь.

Подавляющее большинство библиотек сеансов делают это, устанавливая cookie.

(Is) установка другой переменной сеанса в массиве сеансов, чтобы пользователь вошел в систему, будетдостаточно или мне все еще нужно установить cookie?

Большинство библиотек сеансов устанавливают сеансовые куки .Это файлы cookie без определенного срока действия.Они истекают, когда браузер закрывается, и их недостаточно для реализации функции «Запомнить меня» (которая, как ожидается, сохранится при перезапуске браузера, поэтому должна иметь явное время истечения).

0 голосов
/ 04 февраля 2010

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

Я также хотел бы знать, достаточно ли просто установки другой переменной сеанса в массиве сеансов, чтобы пользователь вошел в систему, или мне все равно нужно установить cookie?

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

0 голосов
/ 04 февраля 2010

Объяснение отношений между Cookie и Сессией:

PHP использует Cookie для уникальной идентификации сеанса для каждого пользователя. Это единственный более надежный способ, потому что cookie отправляется каждый раз, когда вы запрашиваете файл с сервера. Используя токен в cookie, который также является идентификатором Session, PHP проверит каталог tmp, чтобы увидеть, существует ли сеанс. Если сеанс существует, переменные загружаются из правильного файла, и вы сможете получить доступ к переменным в этом сеансе.

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

...