見出し画像

SessionStorage、LocalStorage、Cookieの違い #433

Web開発においてデータストレージの活用は非常に重要です。
これを活用することで、アプリケーションのユーザビリティを向上できます。

ここでは主なデータストレージであるSessionStorage、LocalStorage、Cookieについて整理します。

それぞれ異なる目的と機能を持ち、特有のリスクも伴います。

SessionStorage

用途

  • 一時的なデータ保持: ユーザーがWebページにいる間だけ必要なデータ(例えば、フォームの入力値や一時的な設定)の保存に適しています。

  • タブ固有のデータ: 同一ブラウザ内で開かれた異なるタブ間でデータを共有する必要がない場合に有用です。

特徴

  • 寿命: タブやウィンドウが閉じられるとデータが消去されます。

  • 容量: 約5MBから10MB。

  • アクセス範囲: 同一タブ/ウィンドウ内でのみ。

  • セキュリティ: サーバーとの間で自動送信されません。

リスク

  • タブが閉じられるとデータが消失: 重要なデータは永続的に保存する必要があります。

  • セキュリティ: XSS(クロスサイトスクリプティング)攻撃により、悪意のあるスクリプトからデータが読み取られる可能性があります。

コード

JavaScriptで以下のように使用できます。

データをセット
sessionStorage.setItem('key', 'value');

データを取得
sessionStorage.getItem('key');


LocalStorage

用途

  • 永続的なデータ保持: ユーザーの設定やテーマの選択など、ブラウザを閉じても維持されるべきデータの保存に適しています。

  • 複数タブでのデータ共有: ユーザーが同じサイトの異なるタブを開いている場合に、設定や状態を共有するのに便利です。

特徴

  • 寿命: 手動で削除するまでデータが残ります。

  • 容量: 約5MBから10MB。

  • アクセス範囲: 同一オリジン内の全タブ/ウィンドウから。

  • セキュリティ: サーバーとの間で自動送信されません。

リスク

  • 長期的なデータ露出: 永続的なデータ保存のため、セキュリティリスクが高まります。

  • XSS攻撃: LocalStorageもXSS攻撃の対象となり得ます。

コード

JavaScriptで以下のように使用できます。

データをセット
localStorage.setItem('key', 'value');

データを取得
localStorage.getItem('key');


Cookie

用途

  • セッション管理: ログイン情報やユーザー識別情報など、サーバーとの間で継続的に共有されるべき情報の保持に用いられます。

  • ユーザー追跡: 広告や分析のためにユーザーの行動を追跡する際に使用されることがあります。

  • 設定の保存: 一部のサイトでは、ユーザーの言語設定やその他の好みを保存するためにクッキーを使用します。

特徴

  • 寿命: 期限設定可能。

  • 容量: 最大4KB。

  • アクセス範囲: すべてのリクエストに含まれ、サーバーへ送信されます。

  • セキュリティ: HttpOnly属性でスクリプトからのアクセスを防ぐことが可能。

リスク

  • セキュリティ: クロスサイトリクエストフォージェリ(CSRF)攻撃やセッションハイジャックのリスクがあります。

  • プライバシー: ユーザー追跡などのプライバシーに関する問題が生じることがあります。

コード

使ったことがなかったので、ChatGPTに聞いてみました。
以下でできるみたいですが、すみません、検証はスキップしてます。

データをセット
document.cookie = 'key=value; expires=Fri, 31 Dec 9999 23:59:59 GMT';
 
データを取得
function getCookie(name) {
    let value = "; " + document.cookie;
    let parts = value.split("; " + name + "=");
    if (parts.length === 2) return parts.pop().split(";").shift();
}


ここまでお読みいただきありがとうございました!!

参考


この記事が気に入ったらサポートをしてみませんか?