LocalStorage、sessionStorage、session、cookieの技術的な長所と短所は何ですか?また、どちらを使用するのですか?
これは非常に広い範囲の質問であり、多くの賛否両論が状況に即したものになるでしょう。
全ての場合において、これらの記憶機構は個々のコンピュータ/装置上の個々のブラウザに特有のものとなる。セッションをまたがって継続的にデータを保存するという要件は、アプリケーションサーバー側で行う必要があります。最も可能性が高いのはデータベースですが、XMLまたはtext/CSVファイルの使用です。
localStorage、sessionStorage、およびcookieはすべてクライアントストレージソリューションです。セッションデータは直接管理下にあるサーバーに保持されます。
localStorageとsessionStorageは比較的新しいAPI(つまり、すべてのレガシーブラウザがそれらをサポートするわけではない)で、永続性を除いてほぼ同じです(APIと機能の両方)。 sessionStorage(名前が示すように)はブラウザセッションの間だけ利用可能です(そしてタブまたはウィンドウが閉じられると削除されます) - しかし、ページのリロードを生き残った後は存続します(source DOM Storageガイド - Mozilla Developer Network )。
明らかに、保存しているデータが継続的に利用可能である必要があるならば、localStorageはsessionStorageよりも望ましいです - どちらにしてもデータの継続的存在に頼るべきではないので両方ともユーザーによってクリアできるので注意してください。
localStorageおよびsessionStorageは、ページ間でクライアントスクリプト内で必要とされる機密でないデータを永続化するのに最適です(たとえば、設定、ゲーム内のスコア)。 localStorageおよびsessionStorageに格納されているデータは、クライアント/ブラウザ内から簡単に読み取ったり変更したりすることができるので、機密データまたはセキュリティ関連データをアプリケーション内に格納することに依存しないでください。
これはCookieにも当てはまります。ユーザーがこれらを簡単に改ざんしたり、プレーンテキストでデータを読み取ったりすることもできます。したがって、機密データを保存する場合は、セッションが唯一の選択肢です。 SSLを使用していない場合は、特にオープンwifiで、Cookie情報が送信中に傍受される可能性もあります。
プラス面としては、クロスサイトスクリプティング(XSS)/スクリプトインジェクションのようなセキュリティリスクからある程度の保護を受けることができます。これは、最新の(サポート)ブラウザではJavaScriptへのアクセスとJavaScriptへのアクセスを防ぐことを意味します。これはまたあなた自身の合法的なJavaScriptがそれらにアクセスするのを防ぎます。これは、ログオンしているユーザーの詳細を含むトークンを保存するために使用される認証Cookieで特に重要です。そのCookieのコピーを持っている場合は、あらゆる目的や目的のために、そのユーザーをなり Webアプリケーションに関する限り、ユーザーと同じデータおよび機能へのアクセス権を持ちます。
Cookieは認証目的およびユーザーデータの永続化に使用されるため、[すべての]同じドメインへの要求に対して、ページに有効なall cookieがブラウザからサーバーに送信されます。それ以降のAjaxリクエスト、すべての画像、スタイルシート、スクリプト、フォント。このため、Cookieを使用して大量の情報を保存しないでください。ブラウザは、クッキーに保存できる情報のサイズに制限を課すこともあります。通常、Cookieは認証、セッション、および広告追跡のための識別トークンを格納するために使用されます。トークンは通常、それ自体は人間が読める情報ではなく、アプリケーションまたはデータベースにリンクされた暗号化された識別子です。
機能の面では、cookies、sessionStorage、localStorageは文字列を格納することしかできません - 設定時に暗黙的にプリミティブ値を変換することは可能です(読み込み後にそれらを型として使用するために逆変換する必要があります)。 (APIを使用してそれらを保管するためにJSONを直列化することは可能です)。セッションストレージでは、通常、サーバーサイドの言語/フレームワークでサポートされているプリミティブやオブジェクトを保存できます。
HTTPはステートレスプロトコルであるため、WebアプリケーションはWebサイトに戻るときに前回の訪問からユーザーを識別することはできません。セッションデータは通常、繰り返し訪問のためにユーザーを識別するためにcookieトークンに依存します。同じ目的)。データには通常、スライドした有効期限(ユーザーがアクセスするたびに更新される)があり、データはインプロセス(Webサーバーがクラッシュまたは再起動するとデータが失われる)でインプロセスで保存されます。状態サーバーまたはデータベース。これは、Webファーム(特定のWebサイトに複数のサーバー)を使用する場合にも必要です。
セッションデータはアプリケーション(サーバー側)によって完全に制御されているため、機密性が高く安全なものには最適な場所です。
サーバーサイドデータの明らかな不利な点はスケーラビリティです - セッションの間はサーバーリソースが各ユーザーに必要で、クライアントサイドに必要なデータはリクエストごとに送信される必要があります。ユーザが別のサイトに移動したりブラウザを閉じたりしたかどうかをサーバが知ることができないため、セッションデータは一定時間後に期限切れになり、すべてのサーバリソースが放棄されたセッションによって占有されるのを防ぎます。したがって、セッションデータを使用するときは、特に長いフォームを含むページでは、データが期限切れになって失われる可能性があることに注意する必要があります。また、ユーザーが自分のクッキーを削除したり、ブラウザやデバイスを切り替えたりした場合にも失われます。
Webフレームワークや開発者の中には、セッションの有効期限を避けるために、フォームのあるページから別のページにデータを保持するために隠しHTML入力を使用するものがあります。
localStorage、sessionStorage、およびcookieはすべて「same-Origin」規則に従います。つまり、ブラウザは、情報を最初に設定するドメイン以外のデータへのアクセスを禁止する必要があります。
クライアントストレージ技術の詳細については、 Dive Into Html 5 を参照してください。
長所 :
短所 :
長所:
短所:
データはHTTPリクエスト(HTML、画像、JavaScript、CSSなど)ごとにサーバーに送り返されるため、クライアントとサーバー間のトラフィック量が増加します。
通常、以下が許可されています。
長所:
localStorage
に似ています。短所:
localStorage
と同様に、ttは same-Originポリシー で動作します。そのため、保存されたデータは同じOrigin上でのみ利用可能になります。DocumentがDOMオブジェクトを保持するwindowオブジェクトのプロパティの一つであるように、これらはJavaScriptの 'window'オブジェクトのプロパティです。
Session Storageプロパティは、ページセッションの間、つまりブラウザが開いている限り(ページのリロードと復元を含む)、利用可能なOriginごとに別々の記憶領域を維持します。
ローカルストレージも同じことをしますが、ブラウザを閉じて再び開いても持続します。
次のように格納データを設定および取得できます。
sessionStorage.setItem('key', 'value');
var data = sessionStorage.getItem('key');
LocalStorageも同様です。
ローカルストレージ: 有効期限なしでユーザー情報データを保存し続けます。ユーザーがブラウザウィンドウを閉じても削除されません。
ローカルストレージで5-10メガバイトのオフラインデータを保存することができます。
//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
セッションの保存: ブラウザウィンドウがWebユーザーによって閉じられたときにすべてのウィンドウが削除されること以外はローカルの保存日と同じです。
セッションストレージには最大5MBのデータを保存できます
//set the value to a object in session storege
sessionStorage.myNameInSession = "Krishna";
Session :セッションはサーバーに格納されているグローバル変数です。各セッションには、格納されている値を取得するために使用される一意のIDが割り当てられています。
Cookie :Cookieは、小さなテキストファイルに名前と値のペアとしてコンピュータに保存されているデータです。 Cookieが設定されると、それ以降のすべてのページリクエストはCookieの名前と値を返します。
Web Storage APIは、Cookieを使用するよりもはるかに直感的な方法で、ブラウザが安全にキーと値のペアを保存できるメカニズムを提供します。 Web Storage APIWindow
オブジェクトを、2つの新しいプロパティーWindow.sessionStorage
およびWindow.localStorage
で拡張します。 - これらのいずれかを呼び出すと、Storageオブジェクトのインスタンスが作成され、それを介してデータ項目を設定、取得、削除できます。各Origin(ドメイン)のsessionStorage
とlocalStorage
には、異なるStorageオブジェクトが使用されています。
ストレージオブジェクトは、オブジェクトと同様に単純なkey-valueストアです。しかし、それらはページロードを通じてそのまま残ります。
localStorage.colorSetting = '#a4509b';
localStorage['colorSetting'] = '#a4509b';
localStorage.setItem('colorSetting', '#a4509b');
キーと値は常にstringsです。任意の型 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が推奨する最大ストレージ制限 5MB を実装しています。
+----------------+--------+---------+-----------+--------+
| | 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オブジェクトで発生します。ユーザーエージェントがDocumentの保存通知を送信する場合、ユーザーエージェントはStorageEventを使用して、DocumentオブジェクトのWindowオブジェクトでstorageという名前のイベントを発生させるタスクをキューに入れる必要があります。
注:実際の例については、 Web Storage Demo を参照してください。 ソースコードをチェックアウト
Dom/Windowのストレージイベントを監視して、ストレージの変更をキャッチします。 いじる 。
Cookie (Web Cookie、ブラウザCookie)Cookieは、名前と値のペアとして小さなテキストファイルにコンピュータに保存されているデータです。
を使ったJavaScriptアクセス Document.cookie
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なクッキー HTTPステート管理メカニズム
CookieはWebアプリケーションでユーザーとその認証セッションを識別するためによく使用されます。
HTTPリクエストを受信すると、サーバーは Set-Cookie ヘッダーをレスポンスと共に送信できます。通常、クッキーはブラウザによって保存され、その後クッキーはHTTP HTTPヘッダー内の同じサーバーに対して行われた要求と共に送信されます。
Set-Cookie: <cookie-name>=<cookie-value>
Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date>
セッションクッキー クライアントがシャットダウンされると削除されます。 ExpiresやMax-Ageディレクティブは指定されていません。
Set-Cookie: sessionid=38afes7a8; HttpOnly; Path=/
パーマネントクッキー 特定の日に有効期限が切れる(有効期限)、または特定の期間が過ぎると有効期限が切れる(最大有効期間)。
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
Cookie HTTP要求ヘッダーには、以前にサーバーによってSet-Cookieヘッダーと共に送信されたHTTP HTTP Cookieが格納されています。 HTTPのみのCookieは、クロスサイトスクリプティング(XSS)に対する攻撃を軽減するために、Document.cookieプロパティ、XMLHttpRequestおよびRequest APIを介してJavaScriptを介してアクセスすることはできません。
クッキーは主に3つの目的で使用されます。
クッキーは、「ユーザーに関する情報をどのように記憶するか」という問題を解決するために考案されました。
GitHubGist 例
まとめとして、
ローカルストレージ :
Webストレージは単純にCookieの改善と見なすことができ、はるかに大きなストレージ容量を提供します。利用可能なサイズは5MBで、通常の4KBのクッキーよりもかなり多くの作業スペースがあります。
HTTPリクエスト(HTML、画像、JavaScript、CSSなど)ごとにデータがサーバーに送信されるわけではないため、クライアントとサーバー間のトラフィック量が減少します。
LocalStorageに格納されているデータは、明示的に削除されるまで保持されます。加えられた変更は保存され、現在および将来のそのサイトへのすべてのアクセスで利用可能になります。
同一オリジンポリシーで動作します。そのため、保存されたデータは同じOrigin上でのみ利用可能になります。
クッキー:
クッキーごとに有効期限を設定できます
4Kの制限は、名前、値、有効期限などを含むCookie全体に対するものです。ほとんどのブラウザをサポートするには、名前を4000バイト以下に、Cookie全体のサイズを4093バイト以下にしてください。
データはHTTPリクエスト(HTML、画像、JavaScript、CSSなど)ごとにサーバーに送り返されるため、クライアントとサーバー間のトラフィック量が増加します。
sessionStorage:
変更はウィンドウ(またはChromeやFirefoxのようなブラウザのタブ)ごとにしか利用できません。加えられた変更は保存され、現在のページ、および同じウィンドウでの将来のそのサイトへのアクセスに使用できます。ウィンドウが閉じられると、ストレージは削除されます。データはそれが設定されているウィンドウ/タブ内でのみ利用可能です。
データは永続的ではありません。つまり、ウィンドウ/タブが閉じられると失われます。 localStorageと同様に、同じOriginポリシーで動作します。そのため、保存されたデータは同じOrigin上でのみ利用可能になります。