Cookie, Local Storage та IndexedDB: що таке сесія насправді

Вхід записує дані в три окремі місця. Розуміння, що є чим, пояснює, чому сесії переживають одне, ламаються від іншого і чому синхронізація профілю мусить переносити всі три.
«Бути ввійденим» здається однією річчю. Насправді їх щонайменше три, вони зберігаються в трьох різних місцях з трьома різними термінами життя, і ця різниця пояснює більшість заплутаної поведінки, на яку натрапляють люди, переносячи сесії між машинами.
Cookie
Маленькі пари «ключ — значення», які автоматично надсилаються з кожним запитом до сайту, що їх встановив. Зазвичай саме тут живе токен сесії.
- Обмежені доменом і шляхом, мають дату закінчення.
- Cookie `Secure` надсилається лише через HTTPS; cookie `HttpOnly` невидимий для JavaScript сторінки.
- Сесійний cookie не має терміну дії й призначений зникнути, коли браузер закривається.
Cookie — найменші з трьох і найбільш навантажені. Втратите їх — вийдете з акаунта.
Local Storage і Session Storage
Рядкове сховище «ключ — значення», яке читає й записує JavaScript сторінки, обмежене походженням. Воно ніколи не надсилається із запитом. Сторінка мусить прочитати його свідомо.
Застосунки зберігають тут налаштування, кешовані дані профілю, прапорці функцій і часто токен оновлення. Local Storage зберігається, доки його не очистять; Session Storage живе лише стільки, скільки вкладка.
IndexedDB
Справжня база даних у браузері: структуровані записи, індекси, транзакції. Тут сучасний вебзастосунок тримає все суттєве: кешовані історії повідомлень, офлайн-черги, ключі шифрування для функцій зі наскрізним шифруванням.
Чому це важливо для профілю
Це надає «ізоляції» точного значення. Два профілі ізольовані, коли розділені всі ці три сховища, а також кеш і стан розширень. Інструмент, що ізолює cookie, але ділить IndexedDB, ізолював легку третину проблеми.
Це також задає планку для перенесення профілю між машинами. Перенесення самих лише cookie відтворює форму сесії без її змісту.
| Сховище | Хто записує | Що зазвичай містить |
|---|---|---|
| Cookie | Сервер і скрипт сторінки | Токен сесії, налаштування, ідентифікатори відстеження |
| Local Storage | Скрипт сторінки | Токени оновлення, стан інтерфейсу, кешовані дані профілю |
| Session Storage | Скрипт сторінки | Стан вкладки, відкидається при її закритті |
| IndexedDB | Скрипт сторінки | Кешовані дані, офлайн-черги, ключі шифрування |
Перенесення сесії між власними машинами
PowerOps зберігає cookie, Local Storage та IndexedDB при закритті профілю й відновлює їх, коли він відкривається деінде. Кожна категорія — перемикач, для всього робочого простору або для одного профілю, тож ви переносите рівно стільки, скільки задумали.
Варто знати дві властивості того, як це працює:
- Знімок шифрується на машині, з якої він походить, ключем, що належить робочому простору, і розшифровується на машині, яка відкриває профіль. Це не наскрізне шифрування: сервіс зберігає копію цього ключа, щоб ваші інші комп’ютери могли його отримати.
- Профіль відкритий на одній машині одночасно. Поки він відкритий, він утримує оренду, а іншому пристрою повідомляють, який пристрій його має, замість того, щоб дозволити розгалузити сесію на дві розбіжні копії.
Друге — свідоме обмеження. Дві машини, що редагують одну сесію незалежно, дають дві напівдійсні сесії і, досить часто, розлогінений акаунт на обох. Сховище cookie не має способу розв’язати конфлікт злиття.
Практичний висновок
Закривайте профілі, а не вбивайте їх. Запис при закритті робить сесію переносимою, і це найдешевша звичка в цьому списку.

