ホームページ ウェブフロントエンド jsチュートリアル Cookie、ローカル ストレージ、セッション ストレージ

Cookie、ローカル ストレージ、セッション ストレージ

Jan 05, 2025 pm 07:53 PM

Cookies, Local storage and Session storage

これは、フロントエンドのインタビューの質問シリーズの投稿 #6 です。準備をレベルアップしたい場合、または常に最新情報を入手したい場合は、Frontend Camp へのサインアップを検討してください。


Cookie、ローカル ストレージ、およびセッション ストレージはすべて、クライアント側でデータを保存するために使用されます。これらのメカニズムは、認証トークンや、テーマや個人設定などのクライアントのみの状態を保存する場合に特に役立ちます。 3 つのストレージ タイプはすべて、次の特性を共有しています:

  1. データはキーと値のペアとして保存されます。
  2. すべての値は文字列形式で保存されます。値が文字列でない場合は、保存される前にシリアル化されます。
  3. これらのメカニズムに保存されたデータは、クライアントからアクセスできます (HttpOnly Cookie を除く)。

クッキー

Cookie は大量のデータを保存できません。ストレージの上限はドメインごとに約 4KB です。この制限が存在するのは、ブラウザによってリクエストが行われるたびに Cookie が自動的にサーバーに送信されるためです。過剰なクライアント側データを Cookie に保存すると、ペイロード サイズが増加し、パフォーマンスに悪影響を及ぼします。

Cookie にはどのようなデータを保存する必要がありますか?
Cookie は、認証トークン、セッション ID、分析 ID、および同様の情報など、サーバーに送信する必要があるデータを保存するのに最適です。さらに、Cookie を使用すると、同じドメインまたはサブドメインの異なるタブまたはウィンドウ間でデータを共有できます。

さまざまなフラグを使用して Cookie を構成し、動作を調整したり、セキュリティを強化したりできます。

  • HttpOnly は、クライアント側の JavaScript 経由で Cookie にアクセスできないようにし、XSS 攻撃のリスクを軽減します。
  • maxAge/expires は、Cookie の有効期限を指定します。有効期限が設定されていない場合、Cookie はブラウザを閉じると削除されます。

Cookie フラグについて詳しく知りたいですか?私の LinkedIn 投稿をチェックしてください。

ローカル ストレージやセッション ストレージとは異なり、Cookie は Set-Cookie ヘッダーを使用してサーバーによって設定 (「追加」と読みます) することもできます。

// Set a cookie for the key `token` that `expires` on 1st March 2025.
document.cookie =
  'token=a1-b2-c3; expires=Sat, 1 Mar 2025 23:59:59 GMT; path=/';

// Read all cookies. There's no way to read specific cookies using `document.cookie`.
// You have to parse the string yourself.
console.log(document.cookie); // token=a1-b2-c3

// Delete the cookie with the key `token` by setting an
// expiry date in the past. The value doesn't matter.
document.cookie = 'token=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/';

ローカルストレージ

Cookie とは異なり、localStorage はドメインごとに約 5MB という大幅に大きなストレージ容量を提供します。これは、localStorage が長期データを保存するように設計されているためです。ブラウザが閉じているときでもデータが保持されるため、クライアント側の永続的なストレージのニーズに最適です。

では、localStorage にはどのようなデータを保存すればよいでしょうか?
localStorage は、クライアント側でのみ使用され、リクエストごとにサーバーに送信する必要のないデータの保存に最適です。例としては、Web サイトのテーマや、ユーザーがサインインする前にカートに追加された製品などがあります。

localStorage に保存されたデータは、ユーザーが手動で削除するか、Web サイトが JavaScript を使用してデータを消去するまで無期限に保持されます。

Cookie と同様に、localStorage 内のデータは、同じ生成元のすべてのタブまたはウィンドウからアクセスできるため、ドメイン内のクライアント側の状態を共有するのに役立ちます。

// Set a cookie for the key `token` that `expires` on 1st March 2025.
document.cookie =
  'token=a1-b2-c3; expires=Sat, 1 Mar 2025 23:59:59 GMT; path=/';

// Read all cookies. There's no way to read specific cookies using `document.cookie`.
// You have to parse the string yourself.
console.log(document.cookie); // token=a1-b2-c3

// Delete the cookie with the key `token` by setting an
// expiry date in the past. The value doesn't matter.
document.cookie = 'token=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/';

セッションストレージ

sessionStorage は、有効期間の短いクライアント側データを保存するために使用されます。 localStorage と同様に、ドメインごとに約 5MB のストレージ容量を提供し、同じ API を共有します。

sessionStorage と localStorage はどちらも同様の機能を共有していますが、データ永続性アクセシビリティという 2 つの重要な側面が異なります。
localStorage とは異なり、sessionStorage はタブまたはブラウザを閉じるとデータを保持しません。さらに、sessionStorage に保存されたデータは、そのデータが作成された特定のタブまたはウィンドウに分離されます。つまり、同じオリジンの他のタブまたはウィンドウはアクセスできません。

sessionStorage の使用例は何ですか?
sessionStorage は、単一セッションにのみ必要なデータを保存するのに最適です。たとえば、ユーザーが長いフォームに入力し、誤ってページを更新したとします。フォーム データが sessionStorage に保存されている場合、それは更新中も保持されるため、ユーザーは進行状況を失うことなく続行できます。

ただし、このデータは別のタブからアクセスしたり、タブを閉じるとアクセスできなくなることに注意してください。

// Set a value in localStorage.
localStorage.setItem('theme', 'dark');

// Get a value from localStorage.
console.log(localStorage.getItem('theme')); // 'dark'

// Remove a value from localStorage.
localStorage.removeItem('theme');

// Clear all data in localStorage.
localStorage.clear();

Cookie はブラウザーによって送信されるすべてのリクエストに自動的に含まれますが、localStorage または sessionStorage に保存されているデータは、カスタム コードを記述することでサーバーに手動で送信できます。


まとめ

  1. Cookie、localStorage、sessionStorage は、クライアント側にデータを保存するために使用されます。
  2. Cookie は、Set-Cookie 応答ヘッダーを使用してサーバーによって設定できる唯一のストレージ形式です。
  3. Cookie はリクエストごとに自動的にサーバーに送信されます。
  4. localStorage と sessionStorage は、Cookie (4KB) に比べて非常に大きなストレージ (5MB) を持っています。これらのストレージはどちらも同じ API インターフェイスを共有します。
  5. Cookie には有効期限があり、有効期限がない場合はブラウザを閉じると消去されます。
  6. localStorage データは、ユーザーまたは Web サイト自体が手動で消去しない限り、無期限に存続します。
  7. sessionStorage データは、セッションの終了後、つまりタブまたはウィンドウが閉じられたときにクリアされます。

今読んだ内容は気に入りましたか?フロントエンド キャンプをチェックしてみてください ✌️

以上がCookie、ローカル ストレージ、セッション ストレージの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

node.jsでHTTPリクエストを作成する方法は? node.jsでHTTPリクエストを作成する方法は? Jul 13, 2025 am 02:18 AM

node.jsでHTTPリクエストを開始するには、組み込みモジュール、axios、およびnode-fetchを使用する3つの一般的な方法があります。 1.依存関係のない内蔵http/httpsモジュールを使用します。これは基本的なシナリオに適していますが、https.get()を使用してデータを取得したり、.write()を介してPOSTリクエストを送信するなど、データステッチとエラーモニタリングの手動処理が必要です。 2.Axiosは、約束に基づいたサードパーティライブラリです。簡潔な構文と強力な機能を備えており、非同期/待ち声、自動JSON変換、インターセプターなどをサポートします。非同期リクエスト操作を簡素化することをお勧めします。 3.Node-Fetchは、約束と単純な構文に基づいて、ブラウザフェッチに似たスタイルを提供します

JavaScriptデータ型:プリミティブ対参照 JavaScriptデータ型:プリミティブ対参照 Jul 13, 2025 am 02:43 AM

JavaScriptデータ型は、プリミティブタイプと参照タイプに分割されます。プリミティブタイプには、文字列、数字、ブール、ヌル、未定義、シンボルが含まれます。値は不変であり、コピーは値を割り当てるときにコピーされるため、互いに影響を与えません。オブジェクト、配列、関数などの参照タイプはメモリアドレスを保存し、同じオブジェクトを指す変数は互いに影響します。 TypeofとInstanceOFを使用してタイプを決定できますが、TypeOfNullの歴史的な問題に注意してください。これらの2種類の違いを理解することは、より安定した信頼性の高いコードを書くのに役立ちます。

マップとフィルターを超えて高次関数のJSラウンドアップ マップとフィルターを超えて高次関数のJSラウンドアップ Jul 10, 2025 am 11:41 AM

JavaScriptアレイには、Map and Filterに加えて、他の強力で使用されていない方法があります。 1.還元は、合計するだけでなく、カウント、グループ、フラットンアレイ、新しい構造を構築することもできます。 2。FindおよびFindIndexは、個々の要素またはインデックスを見つけるために使用されます。 3.一部とすべてが条件が存在するか、すべての出会いかを判断するために使用されます。 4.ソートはソートできますが、元の配列を変更します。 5.副作用を避けるために、それを使用するときにアレイをコピーすることに注意してください。これらの方法により、コードがより簡潔で効率的になります。

JavaScriptでオブジェクトの配列をフィルタリングします JavaScriptでオブジェクトの配列をフィルタリングします Jul 12, 2025 am 03:14 AM

JavaScriptのフィルター()メソッドは、すべての合格テスト要素を含む新しい配列を作成するために使用されます。 1.Filter()は元の配列を変更しませんが、条件付き要素を満たす新しい配列を返します。 2。基本的な構文はarray.filter((element)=> {returnCondition;})です。 3.オブジェクト配列は、30歳以上のユーザーをフィルタリングするなど、属性値でフィルタリングできます。 4.年齢と名前の長さの条件を同時に満たすなど、マルチコンディショナルフィルタリングをサポートします。 5。動的条件を処理し、フィルターパラメーターを関数にパスして、柔軟なフィルタリングを実現できます。 6.それを使用する場合は、空のアレイの返品を避けるためにブール値を返すように注意し、他の方法を組み合わせて文字列マッチングなどの複雑なロジックを実現してください。

配列にJavaScriptに値が含まれているかどうかを確認する方法 配列にJavaScriptに値が含まれているかどうかを確認する方法 Jul 13, 2025 am 02:16 AM

JavaScriptでは、配列に特定の値が含まれているかどうかを確認します。最も一般的な方法は、boolean値を返す()を含む()であり、構文はarray.includes(valuetofind)です。古い環境と互換性がある必要がある場合は、numbers.indexof(20)!== -1などのindexof()を使用します。オブジェクトまたは複雑なデータの場合、ユーザー(user => user.id === 1)などの綿密な比較には、いくつかの()メソッドを使用する必要があります。

JavaScriptのコンテキストで説明されている仮想DOMの概念 JavaScriptのコンテキストで説明されている仮想DOMの概念 Jul 12, 2025 am 03:09 AM

Virtual Domは、実際のDOM更新を最適化するプログラミングコンセプトです。メモリ内の実際のDOMに対応するツリー構造を作成することにより、実際のDOMの頻繁かつ直接的な動作を避けます。その中心的な原則は次のとおりです。1。データが変更されたときに新しい仮想DOMを生成します。 2。新しい仮想ドームと古い仮想ドームの最小の違いを見つけます。 3.再配置と再描画のオーバーヘッドを減らすための実際のDOMのバッチアップデート。さらに、ユニークな安定したキーを使用すると、リストの比較効率を改善できますが、最新のフレームワークでは他のテクノロジーを採用して仮想DOMを置き換えます。

async/async/await javascript関数でのエラー処理 async/async/await javascript関数でのエラー処理 Jul 12, 2025 am 03:17 AM

非同期関数のエラーを処理するには、トライ/キャッチを使用し、コールチェーンでそれらを処理し、.catch()メソッドを使用して、unhandledRejectionイベントをリッスンします。 1.トライ/キャッチに使用するためにエラーをキャッチすることは、明確な構造を備えた推奨方法であり、待ち望みの例外を処理できます。 2。コールチェーンの取り扱いエラーは、マルチステッププロセスに適した集中ロジックにすることができます。 3. .catch()を使用して、Async関数を呼び出した後にエラーをキャッチします。これは、Promiseの組み合わせシナリオに適しています。 4.未処理のイベントに耳を傾けて、未処理の拒否を最後の防衛線として記録します。上記の方法は、非同期エラーが正しくキャプチャおよび処理されることを共同で保証します。

JavaScriptのタイムゾーンを処理する方法は? JavaScriptのタイムゾーンを処理する方法は? Jul 11, 2025 am 02:41 AM

JavaScriptタイムゾーンの問題に対処するための鍵は、適切な方法を選択することです。 1.ネイティブの日付オブジェクトを使用する場合は、UTC時間に保存および転送し、表示時にユーザーのローカルタイムゾーンに変換することをお勧めします。 2。複雑なタイムゾーン操作の場合、IANAタイムゾーンデータベースをサポートし、便利なフォーマットおよび変換機能を提供するモーメントタイムゾーンを使用できます。 3.表示時間をローカライズする必要があり、サードパーティライブラリを導入したくない場合は、intl.dateTimeformatを使用できます。 4.最新の軽量ソリューションDay.JSおよびTimeZoneおよびUTCプラグインに推奨されます。

See all articles