Файли cookie: у їх ранній версії текстовий файл з унікальним клієнтом Id та вся інша інформація, необхідна про клієнта (наприклад, ролі)
Файли cookie - це кортежі, key-value
спочатку адресовані для збереження даних, що стосуються діяльності клієнта. Це утримання - це те, що ми знаємо як сеанс або стан програми . По суті, вони були зроблені для зберігання стану веб-додатків; конкретніше, стан на стороні клієнта. (1)
Файли cookie зазвичай встановлюються сервером через заголовки відповідей ( Set-Cookie key=value
). Однак їх може встановити і клієнт. Наприклад, DOM ( document.cookie
).
Важливо знати про файли cookie - це те, що вони не ідентифікують користувачів. Вони швидше асоціюють дані terna - клієнт - сервер / шлях . (3)
Зазвичай ми пов'язуємо файли cookie з файлами, тому що протягом перших днів веб-браузерів їм довелося якось зберігати файли cookie, будучи файлами як найбільш можливою підтримкою. Сьогодні браузери зберігають файли cookie (крім іншого) у локальних сховищах (вбудовані БД).
Сесія: у файл надсилається лише унікальний ідентифікатор клієнта (також званий cookie), а все інше зберігається на сервері.
Під сеансом, я думаю, ви маєте на увазі сеанси сервера . Як я коментував, сеанси можуть бути реалізовані і на стороні клієнта. Відмінність від сеансів на стороні клієнта полягає в тому, що дані зберігаються десь на стороні сервера. (2) У таких сценаріях ми отримуємо ідентифікатор сеансу; і ми отримуємо його у формі печива. Без ідентифікатора сеансу сервер не зміг би співставити вхідні запити з попередньою діяльністю клієнта. (3) Наприклад, автентифікований користувач, кошик для покупок тощо.
У будь-якому випадку ідентифікатор сеансу не обов'язково ідентифікує користувача. Він пов'язує конкретний стан програми з веб-клієнтом. Сесії можуть містити або не містити даних користувачів.
У розподілених додатках сеанс повинен бути серіалізаційним із зрозумілих причин. Якщо вони зберігаються в пам'яті, запам'ятовуючий компонент (компонент) повинен бути серіалізаційним. Поширене рішення - зберігати сеанси у файлах. Або в NoSQL БД, як Redis.
Щодо безпеки. Сеанси на стороні сервера безпечніші, ніж на стороні клієнта. Клієнти вразливіші до загроз, оскільки користувачі зазвичай не знають про стільки загроз, яким вони піддаються. Принаймні, не звичайний користувач.
З іншого боку, атакувати серверну інфраструктуру не є рівнозначним.
JWT: все зберігається в маркері (який також може бути збережений у текстовому файлі, який також називається cookie)
Не зовсім. JWT зберігає дані, в основному пов'язані з авторизацією та видачею маркера.
Хоча вони містять ідентифікатор користувача (суб), ми знаходимо JWT, які не ідентифікують автентифікованих користувачів. Наприклад, жетони для відвідувачів сеансів. Основним змістом JWT є претензії ; елементи, які перевіряються процедурою авторизації.
Важливо пам’ятати, що JWT не є глобальними сховищами . Сесія або стан додатки до сих пір де - то зберігати і управляти незалежно один від одного.
Щодо JWT, вони часто зберігаються у вигляді файлів cookie, хоча вони також можуть зберігатися у місцевих сховищах. Крім того, спільнота OWASP вважає sessionStorage більш безпечним для веб-браузерів. Однак це залежить від версії браузера .
1: Всесвітня павутина покликана бути без громадянства. Якщо ми хочемо створити програми без стану сервера, сеанси повинні зберігатися десь на стороні клієнта.
2: Включення серверної частина програми в динамічне додаток.
3: Клієнт як додаток, а не як користувач.
user_id
зареєстрованого користувача.