В чем разница между cookie-файлами на стороне сервера и cookie-файлами на стороне клиента? - PullRequest
98 голосов
/ 03 августа 2011

В чем разница между созданием файлов cookie на сервере и на клиенте? Это куки на стороне сервера и куки на стороне клиента? Есть ли способ создать куки, которые могут быть прочитаны только на сервере или на клиенте?

Ответы [ 4 ]

127 голосов
/ 03 августа 2011

HTTP COOKIES

Cookies - это пары ключ / значение, используемые веб-сайтами для хранения информации о состоянии в браузере. Скажем, у вас есть веб-сайт (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

Здесь два куки foo = 10 и bar = 20 хранятся в браузере. Второй истекает 30 сентября. При каждом последующем запросе браузер отправляет файлы cookie обратно на сервер.

GET /spec.html HTTP/1.1
Host: www.example.com
Cookie: foo=10; bar=20
Accept: */*

СЕССИИ: серверные куки

Серверные куки известны как «сеансы». В этом случае веб-сайт хранит в браузере один файл cookie, содержащий уникальный идентификатор сеанса. Информация о состоянии (foo = 10 и bar = 20 выше) хранятся на сервере, а идентификатор сеанса используется для сопоставления запроса с данными, хранящимися на сервере.

Примеры использования

Вы можете использовать как сеансы, так и файлы cookie для хранения: данных аутентификации, пользовательских настроек, содержимого диаграммы на веб-сайте электронной коммерции и т. Д ...

Плюсы и минусы

Ниже приведены плюсы и минусы решений. Это первое, что приходит мне в голову, наверняка есть и другие.

Cookie Pros:

  • масштабируемость: все данные хранятся в браузере, поэтому каждый запрос может проходить через балансировщик нагрузки к различным веб-серверам, и у вас есть вся информация, необходимая для полного выполнения запроса;
  • к ним можно получить доступ через javascript в браузере;
  • не будучи на сервере, они выживут после перезапуска сервера;
  • RESTful: запросы не зависят от состояния сервера

Cookie Минусы:

Сеансы Плюсы:

  • как правило, проще в использовании, в PHP, вероятно, нет большой разницы.
  • Неограниченное хранилище

Минусы сессии:

  • сложнее масштабировать
  • при перезапуске веб-сервера вы можете потерять все сеансы или нет в зависимости от реализации
  • не ОТДЫХ
51 голосов
/ 03 августа 2011

Вы, вероятно, имеете в виду разницу между Http Only cookies и их контрагентом?

Http Только файлы cookie не могут быть доступны (считаны или записаны) в клиентском JavaScript, только на стороне сервера. Если флаг Http Only не установлен, или файл cookie создается в (на стороне клиента) JavaScript, файл cookie может считываться и записываться в (на стороне клиента) JavaScript, а также на стороне сервера.

28 голосов
/ 03 августа 2011

Все куки являются клиентом и сервером

Нет никакой разницы. Обычный файл cookie может быть установлен на стороне сервера или на стороне клиента. «Классическое» печенье будет отправлено обратно с каждым запросом. Файл cookie, установленный сервером, будет отправлен клиенту в ответе. Сервер отправляет cookie только тогда, когда он явно установлен или изменен, в то время как клиент отправляет cookie при каждом запросе.

Но по сути это одно и то же печенье.

Но поведение может измениться

Файл cookie в основном представляет собой пару name=value, но после значения может представлять собой набор атрибутов , разделенных точкой с запятой, которые влияют на поведение файла cookie , если это реализовано клиентом (или сервером). Эти атрибуты могут касаться времени жизни, контекста и различных настроек безопасности.

только для HTTP (не только для сервера)

Один из этих атрибутов может быть установлен сервером для указания того, что это cookie только для HTTP. Это означает, что cookie все еще отправляется туда и обратно, но он не будет доступен в JavaScript. Заметьте, однако, что печенье все еще там! Это только встроенная защита в браузере, но если кто-то использует смехотворно старый браузер, такой как IE5, или какой-то другой клиент, он может прочитать cookie!

Так что кажется, что есть «серверные куки», но на самом деле их нет. Эти куки все еще отправляются клиенту. На клиенте нет способа предотвратить отправку куки на сервер.

Альтернативы для достижения единственности

Если вы хотите сохранить значение только на сервере или только на клиенте, вам понадобится другое хранилище, например файл или база данных на сервере или локальное хранилище на клиенте.

3 голосов
/ 07 ноября 2018
  1. Да, вы можете создавать файлы cookie, которые могут быть прочитаны только на стороне сервера.Они называются «HTTP Only» - печенье, как уже объяснялось в других ответах

  2. Нет, я не знаю, как создать «куки», которые могут быть прочитаны только вна стороне клиента.Файлы cookie предназначены для облегчения взаимодействия клиент-сервер.

  3. НО, если вы хотите что-то, КАК "клиент-куки", есть простой ответ: используйте "Локальное хранилище".

Локальное хранилище на самом деле синтаксически проще в использовании, чем файлы cookie.Хорошую простую сводку файлов cookie по сравнению с локальным хранилищем можно найти по адресу:

https://courses.cs.washington.edu/courses/cse154/12au/lectures/slides/lecture21-client-storage.shtml#slide8

Внимание: вы можете использовать файлы cookie, созданные в JavaScript, для хранения вещей, связанных с GUI, которые вынужно только на стороне клиента.НО куки отправляются на сервер для КАЖДОГО сделанного запроса, они становятся частью заголовков http-запроса, в результате чего запрос содержит больше данных и, следовательно, медленнее отправляется.

Если ваша страница содержит 50 ресурсов, таких как изображения, css-файлы и скрипты, тогда cookie (как правило) отправляется с каждым запросом.Подробнее об этом в Каждый веб-запрос отправляет файлы cookie браузера?

Локальное хранилище не имеет этих недостатков, связанных с передачей данных, оно не отправляет данные.Это просто супер.

...