В чем разница между созданием файлов cookie на сервере и на клиенте? Это файлы cookie на стороне сервера и файлы cookie на стороне клиента? Есть ли способ создавать файлы cookie, которые можно читать только на сервере или на клиенте?
В чем разница между cookie на стороне сервера и cookie на стороне клиента?
Ответы (5)
HTTP-файлы 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 на стороне сервера известны как «сеансы». В этом случае веб-сайт сохраняет в браузере один файл cookie, содержащий уникальный идентификатор сеанса. Информация о состоянии (foo = 10 и bar = 20 выше) хранится на сервере, а идентификатор сеанса используется для сопоставления запроса с данными, хранящимися на сервере.
Примеры использования
Вы можете использовать как сеансы, так и файлы cookie для хранения: данных аутентификации, пользовательских настроек, содержимого диаграммы на веб-сайте электронной коммерции и т. Д.
Плюсы и минусы
Ниже плюсы и минусы решений. Это первое, что приходит мне в голову, наверняка есть и другие.
Плюсы cookie:
- масштабируемость: все данные хранятся в браузере, поэтому каждый запрос может проходить через балансировщик нагрузки на разные веб-серверы, и у вас есть вся информация, необходимая для выполнения запроса;
- к ним можно получить доступ через javascript в браузере;
- не будучи на сервере, они переживут перезапуск сервера;
- RESTful: запросы не зависят от состояния сервера
Минусы файлов cookie:
- хранилище ограничено до 80 КБ (20 файлов cookie, по 4 КБ каждое)
- реализовать безопасные файлы cookie непросто: прочтите бумажный документ Безопасный протокол cookie
Плюсы сеанса:
- в целом проще в использовании, в PHP, вероятно, нет большой разницы.
- неограниченное хранилище
Минусы сеанса:
- сложнее масштабировать
- при перезапуске веб-сервера вы можете потерять все сеансы или нет, в зависимости от реализации
- не RESTful
secure
?
- person user2167582; 06.07.2015
Вы, наверное, имеете в виду разницу между файлами cookie только Http и их аналогом?
Файлы 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 и консоли.
- person oligofren; 17.09.2018
В чем разница между созданием файлов cookie на сервере и на клиенте?
Вы имеете в виду два способа настройки файлов cookie на клиенте, а именно:
- По серверу
- По клиенту (в большинстве случаев браузер)
По серверу. Заголовок ответа Set-cookie
от сервера указывает клиенту установить cookie в этом конкретном домене. Реализация для фактического создания и хранения cookie находится в браузере. Для последующих запросов к тому же домену браузер автоматически устанавливает заголовок запроса Cookie
для каждого запроса, тем самым позволяя серверу иметь некоторое состояние для протокола HTTP без сохранения состояния. Атрибуты файлов cookie Domain
и Path
используются браузером для определения, какие файлы cookie должны быть отправлены на сервер. Сервер получает только name=value
пар и не более того.
По клиенту: можно создать файл cookie в браузере, используя document.cookie = cookiename=cookievalue
. Однако, если сервер не намеревается отвечать на какой-либо случайный файл cookie, созданный пользователем, такой файл cookie бесполезен.
Это файлы cookie на стороне сервера и файлы cookie на стороне клиента?
Файлы cookie всегда принадлежат клиенту. Не существует файлов cookie на стороне сервера.
Есть ли способ создавать файлы cookie, которые можно читать только на сервере или на клиенте?
Поскольку чтение значений cookie осуществляется сервером и клиентом, это зависит от того, нужно ли вообще читать cookie. На стороне клиента, установив атрибут HttpOnly
файла cookie, можно предотвратить чтение ваших файлов cookie сценариями (в основном Javscript), тем самым действуя как механизм защиты от кражи файлов cookie через XSS, но отправляя файл cookie только на предполагаемый сервер. .
Следовательно, в большинстве случаев, поскольку файлы cookie используются для «состояния» (памяти о прошлых пользовательских событиях), создание файлов cookie на стороне клиента не приносит особой пользы, если только кто-то не знает, какие файлы cookie использует / на которые отвечает сервер.
Ссылка: Википедия
Да, вы можете создавать файлы cookie, которые могут быть прочитаны только на стороне сервера. Эти файлы cookie называются «только HTTP», как уже объяснялось в других ответах.
Нет, нет способа (я знаю) создать «куки», которые могут быть прочитаны только на стороне клиента. Файлы cookie предназначены для облегчения взаимодействия между клиентом и сервером.
НО, если вы хотите что-то ПОДОБНОЕ «файлы cookie только для клиента», есть простой ответ: используйте «Локальное хранилище».
Локальное хранилище на самом деле синтаксически проще в использовании, чем файлы cookie. Хороший простой обзор файлов cookie и локального хранилища можно найти по адресу:
Примечание: вы можете использовать файлы cookie, созданные в JavaScript, для хранения вещей, связанных с графическим интерфейсом пользователя, которые вам нужны только на стороне клиента. НО файл cookie отправляется на сервер для КАЖДОГО запроса, он становится частью заголовков http-запроса, таким образом, запрос содержит больше данных и, следовательно, медленнее отправляется.
Если на вашей странице 50 ресурсов, таких как изображения, CSS-файлы и скрипты, то cookie (обычно) отправляется с каждым запросом. Подробнее об этом см. Каждый ли веб-запрос отправляет файлы cookie браузера?
Локальное хранилище не имеет недостатков, связанных с передачей данных, оно не отправляет данные. Это здорово.