【ろーかるすとれーじ】

ローカルストレージ とは?

最終更新:
💡 ブラウザの中に「小さな引き出し」を作る

Webブラウザにデータをセッションを越えて保存できるWeb Storage APIの一種。オリジンごとに分けて、サーバ通信なしでクライアント側にデータを保持する。

📌 このページのポイント
localStorage:ブラウザー内の引き出しWebページ設定を保存theme = dark同じオリジンで読む書込localStoragetheme → dark文字列のキーと値HTTPへ自動添付しないlocalStorageセッションを越えて保存APIに有効期限はないsessionStorageタブごとの保存場所ページセッションで終了利用者の削除やブラウザーの処理で消えることも
保存の模式図。容量超過は例外になる。永続保存の保証ではなく、機密情報の保存も避ける。
ひよこ ひよこ
Cookieと何が違うの?
ペンギン先生 ペンギン先生
大きな違いは3つ。①容量:Cookieは1個あたり4KB程度が目安、ローカルストレージはオリジンごとに約5MiB。②サーバ送信:Cookieは条件に合うリクエストでサーバに送信されるけど、ローカルストレージは自動送信されない。③有効期限:Cookieには期限を設定できるけど、ローカルストレージには期限を指定するAPIがない。ただし利用者の削除やブラウザー側の処理で消えることもあるよ
ひよこ ひよこ
何を保存するの?
ペンギン先生 ペンギン先生
ユーザー設定(ダークモードのON/OFF、言語設定)、下書きデータ、キャッシュしたい情報などが一般的だよ。ただしパスワードやセッションIDのような機密データは避けよう。ページ上のJavaScriptから簡単に読めるから、XSS攻撃で読み取られるリスクがあるんだ
ひよこ ひよこ
セッションストレージとの違いは?
ペンギン先生 ペンギン先生
ローカルストレージは「ブラウザを閉じても残る」。セッションストレージは「タブを閉じると消える」し、新しいタブで同じページを開くと別のセッションになる。一時的なデータ(フォームの入力途中データなど)はセッションストレージ、長く残したい設定はローカルストレージと使い分けるのが基本だよ
ひよこ ひよこ
別のサイトのローカルストレージも読めちゃうの?
ペンギン先生 ペンギン先生
読めないよ。保存場所はオリジン(スキーム+ホスト+ポート)ごとに分かれているんだ。http://example.com と https://example.com でも別の保存場所になるから、httpsに移行したら前のデータは見えなくなる点に注意だね
ひよこ ひよこ
開発者ツールで中身を見れる?
ペンギン先生 ペンギン先生
見れるよ。Chromeの開発者ツール→Application→Local Storageで、現在のサイトが保存しているデータが確認できる。つまり利用者自身も中身を見たり書き換えたりできるということ。だから保存された値を「信頼できるデータ」として扱わず、読み込むときにも検証しようね
もっと詳しく知りたい人へ

ログイン用のトークンやセッションIDをローカルストレージに保存してもいい?

避けたほうがいいよ。ローカルストレージの中身はページ上のJavaScriptからいつでも読めるので、XSSが1つでもあると全部盗まれる可能性がある。OWASPはセッションIDを保存しないよう勧めていて、CookieならHttpOnly属性でJavaScriptから読めなくできる。

容量を超えたらどうなる?

setItem()がQuotaExceededErrorという例外を投げて、その値は保存されない。書き込み処理はtry...catchで囲み、古いデータを消す、保存をあきらめるなどの対応を決めておこう。大きなデータや構造化データにはIndexedDBも選択肢になる。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ローカルストレージ」って出てきたら「ブラウザにデータをセッションを越えて保存する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Local Storage」 = ローカル記憶域
💬 HTML仕様で定義されたWeb Storageの一部だよ。条件に合うリクエストで送られるCookieとは別に、ブラウザ側だけにデータを置ける場所として用意されたんだ

参考資料

← 用語集にもどる