Назначение сессий PHP и файлов cookie и их различий

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

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

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

Спасибо за любую обратную связь.

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

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

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

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

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

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

Cookie: name=value

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

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

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

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

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

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

… какие обстоятельства будут уместны?

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

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

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

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

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

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

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

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

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

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