Яка різниця між створенням файлів 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
Тут два браузера 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 та їхньою частиною?
Http Тільки файли cookie не можуть бути доступні (читати з або записуватися) на стороні клієнта JavaScript, лише на стороні сервера. Якщо прапор Http Only не встановлений, або файл cookie створений у (JavaScript-стороні) JavaScript, cookie може бути прочитаний і записаний у (client) JavaScript, а також на стороні сервера.
Усі файли cookie є клієнтськими та серверними
Різниці немає. Звичайним файлом cookie можна встановити сторону сервера або клієнта. "Класичний" файл cookie буде відправлений назад з кожним запитом. Файл cookie, встановлений сервером, буде відправлений клієнтові у відповідь. Сервер надсилає файл cookie лише тоді, коли він явно встановлений або змінений, тоді як клієнт надсилає файл cookie за кожним запитом.
Але по суті це те саме печиво.
Але поведінка може змінитися
Файл cookie - це в основному name=value
пара, але після значення може бути купа атрибутів, розділених напівкрапкою, які впливають на поведінку файлу cookie, якщо це так реалізовано клієнтом (або сервером). Ці атрибути можуть стосуватися терміну служби, контексту та різних параметрів безпеки.
HTTP-тільки (не лише сервер)
Один з цих атрибутів може бути встановлений сервером, щоб вказати, що це файл cookie, який є лише HTTP. Це означає, що файл cookie все ще надсилається вперед і назад, але він не буде доступний у JavaScript. Зауважте, що печиво все ще є! Це лише вбудований захист у браузері, але якщо хтось використовує смішно старий браузер, наприклад IE5, або якийсь спеціальний клієнт, він може насправді прочитати файл cookie!
Тому, схоже, є "серверні файли cookie", але насправді їх немає. Ці файли cookie все ще надсилаються клієнту. На клієнті немає способу запобігти надсиланню файлу cookie на сервер.
Альтернативи досягти "єдиного"
Якщо ви хочете зберігати значення лише на сервері або лише на клієнті, то вам знадобиться якийсь інший тип пам’яті, наприклад, файл або база даних на сервері або Local Storage на клієнті.
document.cookie="foo=bar"
після fetch("/foobar", {credentials: 'include'} )
цього слід не надіслати файл cookie, що містить foo=bar
. Просто спробував цей код прямо на цьому сайті за допомогою DevTools та консолі.
Так, ви можете створювати файли cookie, які можна читати лише на стороні сервера. Вони називаються "лише HTTP" - файлами cookie, як пояснено в інших відповідях
Ні, немає жодного способу (я знаю) створити "куки", які можна читати лише на стороні клієнта. Файли cookie призначені для полегшення зв'язку клієнт-сервер.
АЛЕ, якщо ви хочете щось ПОБАВИТИ "лише клієнт-куки", є проста відповідь: Використовуйте "Місцеве зберігання".
Місцеве зберігання насправді синтаксично простіше у використанні, ніж файли cookie. Хороший простий підсумок файлів cookie та локального сховища можна знайти за адресою:
Точка: Ви можете використовувати файли cookie, створені в JavaScript, для зберігання потрібних вам графічних інтерфейсів лише на стороні клієнта. А ось файл cookie надсилається на сервер для кожного запиту, він стає частиною заголовків http-запиту, завдяки чому запит містить більше даних і тим самим повільніше надсилає.
Якщо на вашій сторінці є 50 ресурсів, як-от зображення та css-файли та сценарії, файл cookie (як правило) надсилається з кожним запитом. Детальніше про це у розділі Чи надсилає кожен веб-запит браузер?
Локальне сховище не має цих недоліків, пов’язаних із передачею даних, воно не надсилає даних. Це здорово.