localStorage、sessionStorage、session、cookiesの技術的な長所と短所は何ですか。
localStorage、sessionStorage、session、cookiesの技術的な長所と短所は何ですか。
回答:
これは非常に広い範囲の質問であり、多くの長所/短所は状況に応じて異なります。
すべての場合において、これらのストレージメカニズムは、個々のコンピューター/デバイス上の個々のブラウザーに固有です。セッション全体で継続的にデータを保存するための要件には、アプリケーションサーバー側が関与する必要があります。おそらくデータベースを使用しますが、XMLまたはテキスト/ CSVファイルを使用する可能性があります。
localStorage、sessionStorage、Cookieはすべてクライアントストレージソリューションです。セッションデータはサーバー上に保持され、直接制御されます。
localStorageとsessionStorageは比較的新しいAPI(つまり、すべてのレガシーブラウザがそれらをサポートするわけではない)であり、永続性を除いてほとんど同じです(APIと機能の両方)。sessionStorage(名前が示すとおり)は、ブラウザーセッションの期間中のみ使用できます(タブまたはウィンドウが閉じられると削除されます)。ただし、ページの再ロード後も存続します(ソースDOMストレージガイド-Mozilla Developer Network)。
明らかに、保存しているデータを継続的に利用できるようにする必要がある場合は、sessionStorageよりもlocalStorageを使用することをお勧めします。ただし、どちらの場合もデータの継続的な存在に依存しないように、両方をユーザーがクリアできることに注意してください。
localStorageとsessionStorageは、ページ間のクライアントスクリプト内で必要な非機密データ(たとえば、設定、ゲームのスコア)を保持するのに最適です。localStorageとsessionStorageに保存されたデータは、クライアント/ブラウザ内から簡単に読み取りまたは変更できるため、アプリケーション内の機密データやセキュリティ関連データの保存に依存しないでください。
これはCookieにも当てはまります。これらはユーザーによって簡単に改ざんされる可能性があり、データはプレーンテキストで読み取ることもできます。したがって、機密データを保存する場合は、セッションが本当に唯一の選択肢です。SSLを使用していない場合、特にオープンwifiで、Cookie情報が転送中に傍受される可能性もあります。
肯定的な面では、Cookieには、クロスサイトスクリプティング(XSS)/スクリプトインジェクションなどのセキュリティリスクからある程度の保護を適用できます。これは、HTTPのみのフラグを設定することで、最新の(サポートする)ブラウザーがJavaScriptからのCookieと値へのアクセスを禁止することを意味します(これにより、独自の正当なJavaScriptがそれらにアクセスすることもできなくなります)。これは、認証Cookieで特に重要です。認証Cookieは、ログオンしているユーザーの詳細を含むトークンを格納するために使用されます。そのCookieのコピーがある場合、すべてのインテントと目的で、Webアプリケーションがそのユーザーである限り、そのユーザーになります。ユーザーが持つデータと機能への同じアクセス権を持っています。
Cookieは認証とユーザーデータの永続化に使用されるため、ページに有効なすべての Cookie は、同じドメインへのすべてのリクエストに対してブラウザからサーバーに送信されます-これには、元のページリクエスト、後続のAjaxリクエスト、すべての画像、スタイルシート、スクリプト、フォント。このため、大量の情報を保存するためにCookieを使用しないでください。ブラウザは、Cookieに保存できる情報のサイズに制限を課す場合もあります。通常、Cookieは、認証、セッション、および広告の追跡用の識別トークンを格納するために使用されます。トークンは通常、それ自体が人間が読み取れる情報ではなく、アプリケーションまたはデータベースにリンクされた暗号化された識別子です。
機能に関しては、cookies、sessionStorage、およびlocalStorageは文字列の保存のみを許可します-設定時にプリミティブ値を暗黙的に変換することができます(これらは読み取り後に型として使用するために変換し直す必要があります)オブジェクトまたは配列は不可(JSONでシリアル化して、APIを使用して保存することができます)。セッションストレージでは通常、サーバー側の言語/フレームワークでサポートされているプリミティブやオブジェクトを保存できます。
HTTPはステートレスプロトコルであるため、Webアプリケーションには、Webサイトに戻る際に以前のアクセスからユーザーを識別する方法がありません。通常、セッションデータはCookieトークンに依存して、繰り返しアクセスするユーザーを識別します(URLパラメータが使用されることはまれですが)同じ目的)。データには通常、スライドする有効期限があり(ユーザーがアクセスするたびに更新されます)、サーバー/フレームワークに応じて、データはインプロセス(Webサーバーがクラッシュまたは再起動するとデータが失われる)または外部で保存されます状態サーバーまたはデータベース。これは、Webファーム(特定のWebサイトに複数のサーバー)を使用する場合にも必要です。
セッションデータはアプリケーション(サーバー側)によって完全に制御されるため、本質的に機密情報や安全性を確保するために最適な場所です。
サーバー側のデータの明らかな欠点はスケーラビリティです。セッションの間、ユーザーごとにサーバーリソースが必要であり、クライアント側で必要なデータはリクエストごとに送信する必要があります。サーバーは、ユーザーが別のサイトに移動したかブラウザを閉じたかを知る方法がないため、すべてのサーバーリソースが放棄されたセッションによって占有されるのを防ぐために、セッションデータは一定時間後に期限切れになる必要があります。したがって、セッションデータを使用する場合は、特に長い形式のページでは、データが期限切れになり、失われる可能性があることに注意してください。また、ユーザーがCookieを削除したり、ブラウザやデバイスを切り替えたりしても失われます。
一部のWebフレームワーク/開発者は、非表示のHTML入力を使用して、フォームの1つのページから別のページにデータを永続化し、セッションの期限切れを回避します。
localStorage、sessionStorage、およびcookieはすべて「同一生成」ルールの対象となります。つまり、情報を設定するドメイン以外のブラウザは、データへのアクセスを禁止する必要があります。
クライアントストレージテクノロジーの詳細については、Dive Into Html 5を参照してください。
sessionStorage
ときに削除され、ウィンドウが閉じている、またはタブ?
長所:
短所:
長所:
短所:
データはHTTPリクエスト(HTML、画像、JavaScript、CSSなど)ごとにサーバーに送り返され、クライアントとサーバー間のトラフィック量が増加します。
通常、以下が許可されます。
長所:
localStorage
ます。短所:
localStorage
、同じ生成元のポリシーで機能します。そのため、保存されたデータは同じオリジンでのみ利用できます。タブを越えたチェックアウト-クロスオリジンのブラウザタブ間の簡単なコミュニケーションを促進する方法。
これらは、ドキュメントがDOMオブジェクトを保持するウィンドウオブジェクトのプロパティの1つであるように、JavaScriptの「ウィンドウ」オブジェクトのプロパティです。
セッションストレージプロパティは、ページセッションの期間中、つまりブラウザが開いている間(ページの再読み込みや復元を含む)使用可能な、指定されたオリジンごとに個別のストレージ領域を維持します。
ローカルストレージは同じことを行いますが、ブラウザを閉じて再度開いた場合でも保持されます。
保存されたデータは、次のように設定および取得できます。
sessionStorage.setItem('key', 'value');
var data = sessionStorage.getItem('key');
localStorageについても同様です。
sessionStorage
新しいタブでも新しいウィンドウです。したがって、1つのタブで特定のドメインに保存されたものは、次のタブの同じドメインでは使用できません。
ローカルストレージ:ユーザー情報データを有効期限なしで保存します。このデータは、ユーザーがブラウザウィンドウを閉じたときに削除されず、日、週、月、年で利用できます。
ローカルストレージでは、5〜10 MBのオフラインデータを保存できます。
//Set the value in a local storage object
localStorage.setItem('name', myName);
//Get the value from storage object
localStorage.getItem('name');
//Delete the value from local storage object
localStorage.removeItem(name);//Delete specifice obeject from local storege
localStorage.clear();//Delete all from local storege
セッションストレージ:ローカルストレージの日付と同じですが、ウェブユーザーがブラウザウィンドウを閉じたときにすべてのウィンドウが削除されます。
セッションストレージでは最大5 MBのデータを保存できます
//set the value to a object in session storege
sessionStorage.myNameInSession = "Krishna";
セッション:セッションは、サーバーに格納されているグローバル変数です。各セッションには、格納された値を取得するために使用される一意のIDが割り当てられます。
Cookie:Cookieはデータであり、コンピュータ上に名前と値のペアとして小さなテキストファイルに保存されます。Cookieが設定されると、それに続くすべてのページ要求はCookieの名前と値を返します。
Web Storage APIは、ブラウザがCookieを使用するよりもはるかに直感的な方法で、キーと値のペアを安全に保存できるメカニズムを提供します。ウェブストレージAPIを拡張しWindow
2つの新しいプロパティを持つオブジェクトを- Window.sessionStorage
とWindow.localStorage
。—これらの1つを呼び出すと、Storageオブジェクトのインスタンスが作成され、データオブジェクトを設定、取得、および削除できます。sessionStorage
とlocalStorage
各オリジン(ドメイン)には異なるストレージオブジェクトが使用されます。
ストレージオブジェクトは、オブジェクトに似た単純なKey-Valueストアですが、ページの読み込み中はそのまま残ります。
localStorage.colorSetting = '#a4509b';
localStorage['colorSetting'] = '#a4509b';
localStorage.setItem('colorSetting', '#a4509b');
キーと値は常に文字列です。任意のタイプconvert it to String
を保存してから保存する。Storage interface
メソッドを使用することを常にお勧めします。
var testObject = { 'one': 1, 'two': 2, 'three': 3 };
// Put the object into storage
localStorage.setItem('testObject', JSON.stringify(testObject));
// Retrieve the object from storage
var retrievedObject = localStorage.getItem('testObject');
console.log('Converting String to Object: ', JSON.parse(retrievedObject));
Web Storage内の2つのメカニズムは次のとおりです。
ストレージ « ローカルストレージはデータをディスクに書き込みますが、セッションストレージはデータをメモリのみに書き込みます。アプリが終了すると、セッションストレージに書き込まれたデータはすべて消去されます。
使用可能な最大ストレージは、ブラウザごとに異なっているが、ほとんどのブラウザでは、少なくとも、W3Cは、最大容量の制限推奨実装した5メガバイトを。
+----------------+--------+---------+-----------+--------+
| | Chrome | Firefox | Safari | IE |
+----------------+--------+---------+-----------+--------+
| LocalStorage | 10MB | 10MB | 5MB | 10MB |
+----------------+--------+---------+-----------+--------+
| SessionStorage | 10MB | 10MB | Unlimited | 10MB |
+----------------+--------+---------+-----------+--------+
LocalStorageセキュリティとクォータ超過エラーを常にキャッチする
QuotaExceededError:この関数window.sessionStorage.setItem(key, value);
でストレージの制限を超えると、新しい値を設定できなかった場合に "QuotaExceededError" DOMException例外がスローされます。(たとえば、ユーザーがサイトのストレージを無効にしている場合や、クォータを超えている場合、設定は失敗する可能性があります。)
DOMException。QUOTA_EXCEEDED_ERRは22で、フィドルの例です。
例外SecurityError:Uncaught SecurityError: Access to 'localStorage' is denied for this document
。
CHROME:-Privacy and security « Content settings « Cookies « Block third-party cookies.
StorageEvent «ストレージ領域が変更されると、ドキュメントのWindowオブジェクトでstorageイベントが発生します。ユーザーエージェントがドキュメントのストレージ通知を送信する場合、ユーザーエージェントは、StorageEventを使用して、DocumentオブジェクトのWindowオブジェクトでstorageという名前のイベントを発生させるタスクをキューに入れる必要があります。
注:実際の例については、Web Storage Demoを参照してください。ソースコードをチェックしてください
dom / Windowのストレージイベントをリッスンして、ストレージの変更をキャッチします。バイオリン。
Cookie(Web Cookie、ブラウザCookie)Cookieは、コンピュータ上の名前と値のペアとして小さなテキストファイルに保存されたデータです。
Document.cookieを使用したJavaScriptアクセス
Document.cookieプロパティを使用してJavaScript経由で新しいCookieを作成することもできます。HttpOnlyフラグが設定されていない場合、JavaScriptから既存のCookieにもアクセスできます。
document.cookie = "yummy_cookie=choco";
document.cookie = "tasty_cookie=strawberry";
console.log(document.cookie);
// logs "yummy_cookie=choco; tasty_cookie=strawberry"
安全なHttpOnly Cookie HTTP状態管理メカニズム
Cookieは、ユーザーとその認証済みセッションを識別するためにWebアプリケーションでよく使用されます
HTTP要求を受信すると、サーバーは応答とともにSet-Cookieヘッダーを送信できます。Cookieは通常ブラウザによって保存され、CookieはCookie HTTPヘッダー内の同じサーバーに対して行われたリクエストとともに送信されます。
Set-Cookie: <cookie-name>=<cookie-value>
Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date>
クライアントがシャットダウンされると、セッションCookieは削除されます。ExpiresやMax-Ageディレクティブは指定していません。
Set-Cookie: sessionid=38afes7a8; HttpOnly; Path=/
永続的なCookieは、特定の日付(Expires)または特定の期間(Max-Age)後に期限切れになります。
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
Cookie HTTPリクエストヘッダーには、以前にSet-Cookieヘッダーを使用してサーバーから送信された、保存済みのHTTP Cookieが含まれています。クロスサイトスクリプティング(XSS)に対する攻撃を緩和するために、Document.cookieプロパティ、XMLHttpRequestおよびRequest APIを介してJavaScript経由でHTTPのみのCookieにアクセスすることはできません。
Cookieは主に次の3つの目的で使用されます。
Cookieは、「ユーザーに関する情報をどのように記憶するか」という問題を解決するために発明されました。
GitHubGistの例
まとめとして、
LocalStorage:
Webストレージは、Cookieの改善と単純に見なすことができ、はるかに大きなストレージ容量を提供します。利用可能なサイズは5MBで、通常の4KB Cookieよりもかなり多くのスペースを処理できます。
データは、HTTPリクエスト(HTML、画像、JavaScript、CSSなど)ごとにサーバーに送り返されないため、クライアントとサーバー間のトラフィック量が減少します。
localStorageに保存されているデータは、明示的に削除されるまで存続します。加えられた変更は保存され、サイトへの現在および将来のすべてのアクセスで利用できます。
同一生成元ポリシーで機能します。そのため、保存されたデータは同じオリジンでのみ利用できます。
クッキー:
クッキーごとに有効期限を設定できます
4Kの制限は、名前、値、有効期限などを含むCookie全体に対するものです。ほとんどのブラウザをサポートするには、名前を4000バイト未満に、Cookie全体のサイズを4093バイト未満にします。
データはHTTPリクエスト(HTML、画像、JavaScript、CSSなど)ごとにサーバーに送り返され、クライアントとサーバー間のトラフィック量が増加します。
sessionStorage:
変更はウィンドウ(またはChromeやFirefoxなどのブラウザのタブ)ごとにのみ使用できます。加えられた変更は保存され、現在のページだけでなく、同じウィンドウでのサイトへの将来のアクセスにも使用できます。ウィンドウを閉じると、ストレージは削除されます。データは、それが設定されたウィンドウ/タブ内でのみ使用できます。
データは永続的ではありません。つまり、ウィンドウ/タブが閉じられると失われます。localStorageと同様に、同じ生成元のポリシーで機能します。そのため、保存されたデータは同じオリジンでのみ利用できます。