2010-02-04 3 views
3

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

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

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

ответ

2

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

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

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

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

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

+0

ОК, поэтому мне нужно будет установить cookie. Я могу использовать один и тот же идентификатор сеанса, хотя для файла cookie, не так ли? Я имею в виду, сессия уже сохраняется в базе данных, мне просто нужно оценить файл cookie клиента и перейти оттуда. Я прав? – AlekT

+0

После нескольких сеансов сеансов вы будете делать очень большой, очень неэффективный магазин сеансов. При разработке функции «Запомнить меня» даже не думайте о сеансах. Используйте другое имя файла cookie. – Quentin

+0

Спасибо Дэйв .. Если я использую другое имя файла cookie, я все равно сохраню идентификатор файла cookie? в базе данных, не так ли? – AlekT

4

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

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

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

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

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

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

+0

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

+0

Просмотреть мои обновления. Обычно при входе в систему я храню идентификатор пользователя в зашифрованном файле cookie и вообще не использую сеанс. Когда я получаю файл cookie, я знаю, вошли ли они в систему или нет. – NotMe

+0

Пока я думаю об этом, Крис, позвольте мне спросить вас еще раз. Вчера я заметил, что мне удалось изменить одно из моих файлов cookie в моем браузере. Разве это не проблема безопасности? Теперь, в зашифрованном файле cookie, есть ли уже функция, которая делает это, или мне нужно будет свернуть? – AlekT

0

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

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

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

+0

Спасибо! Итак, если я правильно понял, PHP будет автоматически использовать один и тот же идентификатор сеанса для файла cookie, правильно? – AlekT

0

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

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

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

+0

Чтобы быть более конкретным: файл cookie удаляется и сеанс прерывается. На стороне сервера вы не можете обнаружить, что браузер закрыт и «уничтожит» сеанс. –

Смежные вопросы