В чем разница между созданием файлов cookie на сервере и на клиенте? Являются ли эти куки файлы на стороне сервера и куки файлы на стороне клиента? Есть ли способ создать файлы cookie, которые могут быть прочитаны только на сервере или на клиенте?
В чем разница между файлом cookie на стороне сервера и файлом cookie на стороне клиента?
Ответ 1
HTTP печенье
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 на стороне сервера называются "сессиями". В этом случае веб-сайт хранит в браузере один файл cookie, содержащий уникальный идентификатор сеанса. Информация о состоянии (foo = 10 и bar = 20 выше) хранятся на сервере, а идентификатор сеанса используется для сопоставления запроса с данными, хранящимися на сервере.
Примеры использования
Вы можете использовать сеансы и файлы cookie для хранения: данных аутентификации, пользовательских настроек, содержимого диаграммы на веб-сайте электронной коммерции и т.д.
Плюсы и минусы
Ниже приведены плюсы и минусы решений. Это первое, что приходит мне в голову, наверняка есть и другие.
Cookie Pros:
- масштабируемость: все данные хранятся в браузере, поэтому каждый запрос может проходить через балансировщик нагрузки к различным веб-серверам, и у вас есть вся информация, необходимая для полного выполнения запроса;
- к ним можно получить доступ через javascript в браузере;
- не будучи на сервере, они выживут после перезагрузки сервера;
- RESTful: запросы не зависят от состояния сервера
Печенье Минусы:
- Размер хранилища ограничен 80 КБ (20 файлов cookie по 4 КБ каждый).
- Безопасные куки не так просто внедрить: взгляните на статью Безопасный протокол куки
Сессия Плюсы:
- как правило, проще в использовании, в PHP, вероятно, нет большой разницы.
- неограниченное хранение
Минусы сессии:
- сложнее масштабировать
- при перезагрузке веб-сервера вы можете потерять все сеансы или нет в зависимости от реализации
- не RESTful
Ответ 2
Вероятно, вы имеете в виду разницу между Http Только файлы cookie и их счетчик?
Http Только cookie файлы не могут быть доступны (считанные или написанные) на стороне клиента JavaScript, только на стороне сервера. Если флаг Http Only не установлен или cookie создан на JavaScript (клиентской стороне), cookie может быть прочитан и написан на стороне клиента (на стороне клиента), а также на стороне сервера.
Ответ 3
Все куки являются клиентом и сервером
Нет никакой разницы. Обычный файл cookie может быть установлен на стороне сервера или на стороне клиента. "Классическое" печенье будет отправлено обратно с каждым запросом. Файл cookie, установленный сервером, будет отправлен клиенту в ответе. Сервер отправляет cookie только тогда, когда он явно установлен или изменен, в то время как клиент отправляет cookie при каждом запросе.
Но по сути это одно и то же печенье.
Но поведение может измениться
Файл cookie в основном представляет собой пару name=value
, но после значения может быть набор атрибутов, разделенных точкой с запятой, которые влияют на поведение файла cookie, если он реализуется клиентом (или сервером). Эти атрибуты могут касаться времени жизни, контекста и различных настроек безопасности.
Только HTTP (не только для сервера)
Один из этих атрибутов может быть установлен сервером, чтобы указать, что это cookie только для HTTP. Это означает, что cookie все еще отправляется туда и обратно, но он не будет доступен в JavaScript. Заметьте, однако, что печенье все еще там! Это только встроенная защита в браузере, но если кто-то будет использовать смехотворно старый браузер, такой как IE5, или какой-то другой клиент, он действительно сможет прочитать cookie!
Таким образом, кажется, что есть "серверные куки", но на самом деле их нет. Эти куки все еще отправляются клиенту. На клиенте нет способа предотвратить отправку куки на сервер.
Альтернативы для достижения "единственности"
Если вы хотите сохранить значение только на сервере или только на клиенте, вам понадобится другое хранилище, например файл или база данных на сервере или локальное хранилище на клиенте.
Ответ 4
-
Да, вы можете создавать куки, которые могут быть прочитаны только на стороне сервера. Они называются "только HTTP" -cookies, как уже объяснялось в других ответах.
-
Нет, я не знаю, как создать "куки", которые могут быть прочитаны только на стороне клиента. Файлы cookie предназначены для облегчения взаимодействия клиент-сервер.
-
НО, если вам нужно что-то вроде "только для клиента -cookies", есть простой ответ: используйте "Local Storage".
Локальное хранилище на самом деле синтаксически проще в использовании, чем куки. Хорошую простую сводку файлов cookie и локального хранилища можно найти по адресу:
Вопрос: вы можете использовать куки, созданные в JavaScript, для хранения вещей, связанных с GUI, которые вам нужны только на стороне клиента. НО куки отправляются на сервер для КАЖДОГО сделанного запроса, они становятся частью заголовков http-запроса, в результате чего запрос содержит больше данных и, следовательно, медленнее отправляется.
Если ваша страница содержит 50 ресурсов, таких как изображения, css файлы и скрипты, тогда cookie (как правило) отправляется с каждым запросом. Подробнее об этом в каждом веб-запросе отправлять куки браузера?
Локальное хранилище не имеет этих недостатков, связанных с передачей данных, оно не отправляет данные. Это просто супер.