TL

Web ストレージ(localStorage / sessionStorage)

ブラウザにキーと値を保存する仕組みです。Cookie と違いサーバへ自動送信されず容量も大きい一方、機密情報を入れてはいけない点を整理します。

基礎Web ストレージlocalStorageブラウザフロントエンド最終更新: 2026-06-06
TL;DR要点だけ先に
  • 1.Web ストレージはブラウザ内にキーと値(文字列)を保存する仕組みで、localStorage と sessionStorage がある。
  • 2.Cookie と違ってリクエストに自動で付かない(サーバへ送られない)ため、純粋なクライアント側の保存に向く。
  • 3.JavaScript から誰でも読めるので、トークンやパスワードなどの機密は保存しないこと。

Web ストレージとは

Web ストレージは、ブラウザにデータを保存するための仕組みです。キーと値のペアで保存し、どちらも文字列として扱われます。種類は 2 つあります。

  • localStorage:明示的に消すまで永続して残る(タブやブラウザを閉じても消えない)。
  • sessionStorage:そのタブを閉じると消える。タブごとに独立している。

どちらもオリジン単位(スキーム・ホスト・ポートの組)で分離されており、別オリジンのデータは見えません。サーバを介さず、JavaScript から直接読み書きします。

使い方

API は両者で共通です。setItem / getItem / removeItem / clear を使います。

// 保存(値は文字列。オブジェクトは JSON 文字列にして入れる)
localStorage.setItem("theme", "dark");
localStorage.setItem("user", JSON.stringify({ id: "u123", name: "Taro" }));

// 取得
const theme = localStorage.getItem("theme"); // "dark"
const user = JSON.parse(localStorage.getItem("user")); // オブジェクトに戻す

// 削除
localStorage.removeItem("theme");
localStorage.clear(); // そのオリジンの全件を削除

// タブ限定にしたいときは sessionStorage(API は同じ)
sessionStorage.setItem("step", "2");

値は文字列のみなので、オブジェクトや配列は JSON.stringify で文字列化して保存し、取り出すときに JSON.parse で戻します。

Cookie との違い

「ブラウザに保存する」点は同じですが、性質はかなり異なります。一番の違いはサーバへ自動送信されるかです。

観点Web ストレージCookie
サーバへの送信送られない(クライアント専用)同じサイト宛に自動で付く
容量の目安数 MB 程度と大きめ1 件 4 KB 程度と小さい
有効期限local は永続 / session はタブ閉じまで属性で指定(無指定はセッション Cookie)
主な用途UI 設定・下書き・キャッシュ等認証・サーバ側セッションの ID 運搬
JS からの読み取り常に可能HttpOnly を付ければ不可

Cookie はリクエストごとに自動で送られるため、**サーバが知る必要のある情報(セッション ID など)**に向きます。逆に Web ストレージは送られないので、クライアントだけで完結する情報に向きます。

local と session の使い分け

ログイン後も保持したい設定や下書きは localStorage。入力ウィザードの途中状態など「そのタブの一時的な作業」は sessionStorage。タブごとに独立させたいかどうかで選ぶと迷いません。

主な用途

サーバに送る必要がなく、文字列で表せるデータの保存に向きます。

  • UI / 表示設定:ダークモード、言語、サイドバーの開閉状態。
  • 入力の下書き:フォームの一時保存、書きかけのコメント。
  • 軽いキャッシュ:再取得が高コストなデータの一時保持。
  • タブ単位の作業状態(sessionStorage):複数ステップ入力の途中経過。

注意点

手軽な一方、設計を誤ると不具合や事故になります。

  • 機密を入れない:JavaScript から誰でも読めるため、XSS が起きるとまるごと盗まれる。トークンやパスワードは保存しない。
  • 同期 API:読み書きはメインスレッドを止める同期処理。大量データの頻繁な読み書きは避ける。
  • 文字列だけ・容量制限あり:数値やオブジェクトは変換が必要。上限(数 MB 程度)を超えると例外になる。
  • 構造化データには不向き:大量・検索が要るデータは IndexedDB の方が適している。
認証トークンを localStorage に置かない

「Cookie は CSRF があるから localStorage の方が安全」という話を見かけますが、localStorage は JavaScript から読めるため XSS で盗まれます。認証トークンは原則 HttpOnly 属性付きの Cookie に置き、Web ストレージには見られて困らない情報だけを入れてください。

認証情報の置き場所のトレードオフは Cookie とセッション で、オリジンの考え方は CORS で詳しく扱っています。

Web/フロントエンド Article

Web ストレージ(localStorage / sessionStorage)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

Web ストレージ

比較で見る軸

難易度: basic / カテゴリ: Web/フロントエンド / タグ数: 4

導入後に効く点

Cookie と違ってリクエストに自動で付かない(サーバへ送られない)ため、純粋なクライアント側の保存に向く。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
basic
カテゴリ
Web/フロントエンド
タグ数
4

判断チェックリスト

  • 自社の用途が「Web ストレージ / localStorage」に近いか確認する。
  • 強みである「Web ストレージはブラウザ内にキーと値(文字列)を保存する仕組みで、localStorage と sessionStorage がある。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

Web ストレージlocalStorageブラウザフロントエンドWeb ストレージlocalStorageブラウザフロントエンド
参考: 公式情報