PowerScan
JA

Cookie、Local Storage、IndexedDB:セッションの正体

アンチディテクトブラウザ · 読了目安 7 分 · PowerOps 著

写真: Unsplash

サインインすると、3つの別々の場所に書き込まれます。どれがどれかを知ると、セッションがある操作では残り、別の操作では壊れる理由と、プロファイルの同期が3つすべてを移す必要がある理由が分かります。

「ログインしている」状態は1つのことのように感じられます。実際には少なくとも3つで、3つの異なる場所に、3つの異なる寿命で保存されており、その違いが、セッションをマシン間で移すときに人々が出くわす混乱した挙動の大部分を説明します。

Cookie

小さなキーと値のペアで、それを設定したサイトへのすべてのリクエストとともに自動的に送信されます。セッショントークンは通常ここにあります。

Cookieは3つの中で最も小さく、最も重要な役割を担っています。失えば、サインアウトされます。

Local StorageとSession Storage

文字列のキーと値のストレージで、ページのJavaScriptが読み書きし、オリジンごとにスコープされます。リクエストとともに送信されることはなく、ページが意図的に読み取る必要があります。

アプリケーションは、設定、キャッシュしたプロフィールの詳細、機能フラグ、そしてしばしばリフレッシュトークンをここに保存します。Local Storageは消去されるまで残り、Session Storageはタブが開いている間だけ続きます。

IndexedDB

ブラウザ内の本格的なデータベースで、構造化されたレコード、インデックス、トランザクションを備えます。最新のウェブアプリケーションが、キャッシュしたメッセージ履歴、オフラインキュー、エンドツーエンド暗号化機能の暗号鍵など、規模のあるものをすべて保管する場所です。

プロファイルにとってなぜ重要か

これは「分離」に正確な意味を与えます。2つのプロファイルが分離されているとは、これら3つがすべて別々で、さらにキャッシュと拡張機能の状態も別々であるということです。Cookieだけを分離してIndexedDBを共有するツールは、問題の簡単な3分の1しか分離していません。

また、プロファイルをマシン間で移す際の基準にもなります。Cookieだけを運んでも、セッションの形を再現するだけで、中身は再現されません。

ストア書き込む主体主に保持するもの
Cookieサーバーとページのスクリプトセッショントークン、設定、トラッキング用識別子
Local Storageページのスクリプトリフレッシュトークン、UIの状態、キャッシュしたプロフィールの詳細
Session Storageページのスクリプトタブごとの状態、タブを閉じると破棄される
IndexedDBページのスクリプトキャッシュデータ、オフラインキュー、暗号鍵

自分のマシン間でセッションを移す

PowerOpsは、プロファイルを閉じるときにCookie、Local Storage、IndexedDBを取得し、別の場所で開くときに復元します。各カテゴリはワークスペース全体、または個別のプロファイルに対するスイッチになっているので、移したい分だけを正確に移せます。

この仕組みについて知っておく価値のある性質が2つあります。

2点目は意図的な制限です。2台のマシンが1つのセッションを独立して編集すると、半分だけ有効なセッションが2つできて、しばしば両方でアカウントがサインアウトされます。Cookieの保管場所には、マージの競合を解決する手段がありません。

実践上のポイント

プロファイルは強制終了せず、閉じてください。閉じるときの書き出しがセッションを持ち運べるものにしており、このリストの中で最も手間のかからない習慣です。

すべての記事 · スキャンを実行