В чем разница между созданием файлов cookie на сервере и на клиенте? Это файлы cookie на стороне сервера и файлы cookie на стороне клиента? Есть ли способ создать файлы cookie, которые можно читать только на сервере или на клиенте?
В чем разница между созданием файлов cookie на сервере и на клиенте? Это файлы cookie на стороне сервера и файлы cookie на стороне клиента? Есть ли способ создать файлы cookie, которые можно читать только на сервере или на клиенте?
Ответы:
Файлы cookie - это пары ключ / значение, используемые веб-сайтами для хранения информации о состоянии в браузере. Допустим, у вас есть веб-сайт (example.com), когда браузер запрашивает веб-страницу, веб-сайт может отправлять файлы cookie для хранения информации в браузере.
Пример запроса браузера:
GET /index.html HTTP/1.1
Host: www.example.com
Пример ответа с сервера:
HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: foo=10
Set-Cookie: bar=20; Expires=Fri, 30 Sep 2011 11:48:00 GMT
... rest of the response
Здесь в браузере хранятся два файла cookie: foo = 10 и bar = 20. Срок действия второго истекает 30 сентября. В каждом последующем запросе браузер отправляет файлы cookie обратно на сервер.
GET /spec.html HTTP/1.1
Host: www.example.com
Cookie: foo=10; bar=20
Accept: */*
Файлы cookie на стороне сервера известны как «сеансы». В этом случае веб-сайт сохраняет в браузере один файл cookie, содержащий уникальный идентификатор сеанса. Информация о состоянии (foo = 10 и bar = 20 выше) хранится на сервере, а идентификатор сеанса используется для сопоставления запроса с данными, хранящимися на сервере.
Вы можете использовать как сеансы, так и файлы cookie для хранения: данных аутентификации, пользовательских настроек, содержимого диаграммы на веб-сайте электронной коммерции и т. Д.
Ниже плюсы и минусы решений. Это первое, что приходит мне в голову, наверняка есть и другие.
Плюсы cookie:
Минусы cookie:
Плюсы сеанса:
Минусы сессии:
secure
?
Вы, наверное, имеете в виду разницу между файлами cookie Http Only и их аналогом?
Файлы cookie только Http не могут быть доступны (прочитаны или записаны) в JavaScript на стороне клиента, только на стороне сервера. Если флаг Http Only не установлен или cookie создается в (клиентском) JavaScript, cookie может быть прочитан и записан в (клиентском) JavaScript, а также на стороне сервера.
Все файлы cookie являются клиентскими и серверными
Нет никакой разницы. Обычный файл cookie может быть установлен на стороне сервера или клиента. «Классический» файл cookie будет возвращаться с каждым запросом. Файл cookie, установленный сервером, будет отправлен клиенту в ответ. Сервер отправляет cookie только тогда, когда он явно установлен или изменен, в то время как клиент отправляет cookie по каждому запросу.
Но по сути это одно и то же печенье.
Но поведение может измениться
Файл cookie - это в основном name=value
пара, но после значения может быть набор атрибутов , разделенных точкой с запятой, которые влияют на поведение файла cookie, если он так реализован клиентом (или сервером). Эти атрибуты могут касаться времени жизни, контекста и различных настроек безопасности.
Только HTTP (не только сервер)
Один из этих атрибутов может быть установлен сервером, чтобы указать, что это файл cookie только для HTTP. Это означает, что файл cookie по-прежнему отправляется туда и обратно, но он не будет доступен в JavaScript. Однако обратите внимание, что файл cookie все еще там! Это всего лишь встроенная защита в браузере, но если кто-то будет использовать до смешного старый браузер, такой как IE5, или какой-нибудь собственный клиент, он действительно сможет прочитать cookie!
Кажется, что есть «серверные куки», но на самом деле их нет. Эти файлы cookie по-прежнему отправляются клиенту. На клиенте нет способа предотвратить отправку файла cookie на сервер.
Альтернативы достижению «единственности»
Если вы хотите сохранить значение только на сервере или только на клиенте, вам понадобится другое хранилище, например файл или база данных на сервере или локальное хранилище на клиенте.
document.cookie="foo=bar"
за которым fetch("/foobar", {credentials: 'include'} )
следует, не отправляется файл cookie, содержащий foo=bar
. Просто попробовал этот код прямо на этом сайте с помощью DevTools и консоли.
Да, вы можете создавать файлы cookie, которые могут быть прочитаны только на стороне сервера. Эти файлы cookie называются «только HTTP», как уже объяснялось в других ответах.
Нет, нет способа (я знаю) создать «куки», которые могут быть прочитаны только на стороне клиента. Файлы cookie предназначены для облегчения взаимодействия между клиентом и сервером.
НО, если вы хотите что-то ПОДОБНОЕ «файлы cookie только для клиента», есть простой ответ: используйте «Локальное хранилище».
Локальное хранилище на самом деле синтаксически проще в использовании, чем файлы cookie. Хороший простой обзор файлов cookie и локального хранилища можно найти по адресу:
Примечание: вы можете использовать файлы cookie, созданные в JavaScript, для хранения вещей, связанных с графическим интерфейсом пользователя, которые вам нужны только на стороне клиента. НО cookie отправляется на сервер для КАЖДОГО запроса, он становится частью заголовков http-запроса, таким образом, запрос содержит больше данных и, следовательно, медленнее отправляется.
Если на вашей странице 50 ресурсов, таких как изображения, CSS-файлы и скрипты, то cookie (обычно) отправляется с каждым запросом. Подробнее об этом см. Каждый ли веб-запрос отправляет файлы cookie браузера?
Локальное хранилище не имеет недостатков, связанных с передачей данных, оно не отправляет данные. Это просто супер.