sessionStorage(セッション保存)

sessionStorage.setItem getItem

タブ・ウィンドウを閉じると消えるストレージです。同じタブ内でのみ共有され、別タブとは独立しています。

デモ:sessionStorage の読み書き

このタブでのページ訪問回数:0
(タブを閉じるとリセットされます。リロードでは増加します)

コード例

js
// sessionStorage(APIはlocalStorageと全く同じ)
sessionStorage.setItem('formData', JSON.stringify(formValues));
const data = JSON.parse(sessionStorage.getItem('formData') ?? 'null');
sessionStorage.removeItem('formData');
sessionStorage.clear();

// 活用パターン:フォームの一時保存
// input イベントで自動保存
input.addEventListener('input', () => {
  sessionStorage.setItem('draft', input.value);
});
// ページ読み込み時に復元
input.value = sessionStorage.getItem('draft') ?? '';

// ページ遷移中のデータ受け渡し
// ページA
sessionStorage.setItem('selectedProduct', JSON.stringify(product));
location.href = '/checkout';

// ページB(/checkout)
const product = JSON.parse(sessionStorage.getItem('selectedProduct'));

比較:localStorage vs sessionStorage

観点localStoragesessionStorage
有効期間永続(手動削除まで)タブを閉じるまで
タブ間の共有✅ 同一オリジンで共有❌ タブごとに独立
リロードで消える?❌ 消えない❌ 消えない(タブが生きている間)
主な用途ユーザー設定、認証トークンキャッシュフォームの下書き、ページ間データ受け渡し

⚠️ sessionStorage の落とし穴

js
// 新しいタブで開くと、sessionStorageは引き継がれない
// (Ctrl+クリック、window.open で開いた新タブは空)

// ただし「タブを複製」すると一部ブラウザで引き継がれる場合がある

// プライベートモードでも利用可能
// ただし閉じると確実に消える

// SSR(サーバーサイドレンダリング)では使えない
// typeof window !== 'undefined' でチェックが必要
if (typeof window !== 'undefined') {
  sessionStorage.setItem('key', 'value');
}

🤖 AIプロンプトテンプレート

以下のようなsessionStorageを使ったセッション中のデータ管理のサンプルコードを生成してください:
- sessionStorage.setItem / getItem / removeItemの基本操作
- フォーム入力をsessionStorageに自動保存してページ離脱から復元するパターン
- ページ間でsessionStorageを使ってデータを受け渡す実装(商品選択→決済ページなど)
- sessionStorageとlocalStorageの使い分け(タブ閉じで消えるvs永続)
- SSR環境でのtypeof window チェックによる安全なアクセス方法

⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。