Цель сессий и файлов cookie PHP и их отличия - PullRequest
2 голосов
/ 10 апреля 2011

Я только начинаю учиться программировать на PHP и столкнулся с немного запутанной областью, Сессиями и Куки.

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

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

Спасибо за любые отзывы.

Ответы [ 3 ]

3 голосов
/ 10 апреля 2011

Прежде всего, давайте разрушим давний миф (или, по крайней мере, я думаю, что это существующий миф), что сеансовый cookie-файл - это нечто иное, чем обычный cookie-файл.Это не.Сеансовый файл cookie - это обычный файл cookie.Только свойства cookie сеанса, которые установлены (или, скорее, не установлены), обычно отличаются.Но механизм точно такой же.

Файл cookie устанавливается путем отправки заголовка ответа http браузеру:

Set-Cookie: name=value[; possible expiration-date][; other possible properties]

Что обычно отличает файл cookie сеансаиз обычного файла cookie означает, что дата окончания срока действия не установлена ​​( или дата окончания срока действия установлена ​​на дату в прошлом ).Это означает, что браузер будет удалять куки после закрытия браузера.Но «обычное» печенье может сделать это точно так же.Таким образом, тем самым превращая его в «сессионное печенье», так сказать.

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

Каждый раз, когда браузер запрашивает ресурс на сервере, он отправляет этот файл cookie (если срок его действия не истек) с заголовком http-запроса, например так:*

Cookie: name=value

Механизмы сеанса в бэкэнде (в вашем случае PHP) связывали уникальный идентификатор cookie с данными, которые были сохранены в файле в файловой системе сервера, или, возможно, вбаза данных.Таким образом, каждый раз, когда файл cookie получен, он может извлечь эти данные и связать их с запросом.

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

Таким образом, в основном вы хотите отправлять нечувствительную и не жизненно важную информацию в видеобычный файл cookie (например, настройки макета, непостоянный список воспроизведения, например, на YouTube и т. д.) и использование сеанса для хранения конфиденциальной информации.

edit:
Извините, не обращайте внимания на то, что «или срок действия установлен на дату в прошлом», поскольку это было ложно.Это приведет к тому, что cookie будет немедленно аннулирован браузером и, следовательно, больше не будет отправляться вместе с запросами.

1 голос
/ 10 апреля 2011

Преимущество использования файлов cookie перед сеансами заключается в том, что файлы cookie являются постоянными .

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

... какие обстоятельства будут подходить для каждого?

Ответ выглядит примерно так:

  • Данные сеанса должны содержать информацию, которая не должна быть постоянной или нужна только в течение короткого периода времени. Например, если вы предоставляете пользователю многостраничную форму, имеет смысл воспользоваться сеансами.
  • Файлы cookie должны использоваться для хранения идентификатора или хэша, которые однозначно идентифицируют не только пользователя, но также браузер / устройство, с которым они вошли в систему. Помните, что данные cookie находятся вне вашего контроля, и ими можно манипулировать / удалять только HTTP-запросы, сделанные пользователем (или при определенных обстоятельствах скриптом на странице).

Кроме того, я видел, как люди говорили, что cookie можно использовать для хранения идентификатора сеанса ...

Я предполагаю, что под этим подразумевалось сохранение уникального значения в файле cookie, которое идентифицирует пользователя / браузер / устройство, которое они используют. Реализация чего-то подобного будет выглядеть так:

  • Позвольте пользователю войти в систему как обычно.
  • Создайте уникальный хэш (SHA-1 - ваш лучший выбор) и сохраните его в файле cookie. Вы также сохраняете хеш в базе данных, связанной с этим пользователем.
  • ...
  • Пользователь возвращается после окончания сеанса и заходит на страницу.
  • Ваш скрипт видит cookie и ищет пользователя, которому принадлежит хеш.
  • Пользователь вошел в систему.
0 голосов
/ 10 апреля 2011

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

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

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

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

Вышеуказанный процесс выполняется PHP автоматически при использовании функций сеанса; вам не нужно реализовывать это вручную. Если по какой-либо причине вам необходимо изменить способ реализации сеансов, вы можете сделать это, изменив параметры сеанса в php.ini.

...