Цель сессий и файлов cookie PHP и их отличия
Я только начинаю учиться программировать на PHP и столкнулся с немного запутанной областью, сессиями и файлами cookie.
Я понимаю различия между хранилищами на стороне сервера и на стороне клиента, но не вижу, как они различаются и для каких обстоятельств каждый из них подходит?
Кроме того, я видел, как люди говорили, что cookie можно использовать для хранения идентификатора сессии. Как это будет сделано и почему это будет выгодно?
Спасибо за любые отзывы.
3 ответа
Прежде всего, давайте разрушим давнишний миф (или, по крайней мере, я думаю, что это существующий миф), что сессионный cookie - это нечто иное, чем обычный cookie. Это не. Сеансовый файл cookie - это обычный файл cookie. Только свойства cookie сеанса, которые установлены (или, скорее, не установлены), обычно различаются. Но механизм точно такой же.
Файл cookie устанавливается путем отправки заголовка ответа http в браузер:
Set-Cookie: name=value[; possible expiration-date][; other possible properties]
Что обычно отличает сеансовый файл 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 должны использоваться для хранения идентификатора или хэша, которые однозначно идентифицируют не только пользователя, но и браузер / устройство, с которым они вошли в систему. Помните, что данные cookie находятся вне вашего контроля, и ими можно манипулировать / удалять только HTTP-запросы, сделанные пользователем (или, при определенных обстоятельствах, скриптом на странице).
Кроме того, я видел, как люди говорят, что cookie может быть использован для хранения идентификатора сеанса...
Я предполагаю, что под этим подразумевалось сохранение уникального значения в файле cookie, которое идентифицирует пользователя / браузер / устройство, которое они используют. Реализация чего-то подобного будет выглядеть так:
- Позвольте пользователю войти как обычно.
- Создайте уникальный хэш (SHA-1 - ваш лучший выбор) и сохраните его в файле cookie. Вы также сохраняете хеш в базе данных, связанной с этим пользователем.
- ...
- Пользователь возвращается после окончания сеанса и заходит на страницу.
- Ваш скрипт видит cookie и ищет пользователя, которому принадлежит хеш.
- Пользователь вошел в систему.
Как файлы cookie, так и сеансы используются для хранения пользовательской информации для отслеживания пользователя. Много раз вы можете использовать любой из них, но они имеют некоторые различия.
Cookie - это текстовый файл, который хранится на компьютере пользователя. Каждый раз, когда пользователь посещает ваш сайт, он передает файл cookie, сообщая вам, кто он. Преимущество этого в том, что информация хранится на чужой машине, поэтому вам не нужно об этом беспокоиться. Таким образом, вы можете оставить его там, пока коровы не вернутся домой. Когда / если пользователь вернется, он принесет информацию с собой. Недостатком является то, что информация находится вне вашего контроля, потому что пользователь может легко редактировать куки, которые вы ему дали. Это делает любую информацию в куки ненадежной и должна проверяться каждый раз, когда пользователь предоставляет ее вам.
Сеанс похож на cookie, за исключением того, что вы храните информацию на своем сервере. Преимущество состоит в том, что вы можете доверять сеансу, чтобы хранить данные в точности так, как это было при вводе. Недостатком является то, что вам нужно хранить эту информацию, а это значит, что в конечном итоге вам придется отказаться от нее, чтобы ваш веб-сервер не заполнился информацией. это никогда не будет использовано.
Теперь это где немного сложнее. Видите ли, хотя механизм сеанса такой, как я описал выше, фактическая реализация может варьироваться в зависимости от настроек PHP. Данные сеанса могут храниться в отдельных текстовых файлах или в базе данных на вашем сервере. Также вам нужен какой-то способ узнать, какой сеанс соответствует какому пользователю. Обычный (но не только) способ сделать это с помощью куки. Что происходит, так это то, что фактические данные остаются на вашем сервере и связаны с уникальным идентификатором сеанса. Этот идентификатор сеанса помещается в файл cookie и передается пользователю, чтобы вы могли позже просмотреть его данные, когда он вернется.
Вышеуказанный процесс выполняется автоматически PHP при использовании функций сеанса; Вам не нужно реализовывать это вручную. Если по какой-либо причине вам нужно изменить способ реализации сессий, вы можете сделать это, изменив параметры сеанса в php.ini.