HTML5 では、クライアント側で構造化データを保存し、次の欠点を克服するために、HTTP セッション Cookie に似た 2 つのメカニズムが導入されています。
Cookie はすべての HTTP リクエストに含まれており、同じデータの転送により Web アプリケーションの速度が低下します。
すべての HTTP リクエストには Cookie が含まれているため、暗号化されていないデータがインターネット上に送信されます。
Cookie は 4KB の限られたデータしか保存できませんが、必要なデータを保存するには十分ではありません。
セッション ストレージとローカル ストレージの 2 つのストレージ方法は、さまざまな状況に対処するために使用されます。
Internet Explorer を含む、最近のほとんどすべてのブラウザは HTML5 ストレージをサポートしています。
Session Storage
_Session Storage_ は、ユーザーが単一のトランザクションを実行するシナリオ向けに設計されていますが、複数のトランザクションを異なるウィンドウで同時に実行できます。
例
たとえば、ユーザーが同じ Web サイト上の 2 つの異なるウィンドウで航空券を購入した場合。 Web サイトが Cookie を使用してユーザーが購入したチケットを追跡する場合、ユーザーがページをクリックしてあるウィンドウから別のウィンドウに移動するときに、現在購入しているチケットが「漏洩」し、その結果、ユーザーが 1 回のチケットを 2 枚購入することになる可能性があります。気付かずに同じフライト。
HTML5 では、sessionStorage 属性が導入されました。この Web サイトを使用すると、セッションを保持している開いているウィンドウ内の任意のページに引き続きアクセスできます。も負けた。
次のコードはセッション変数を設定し、その変数にアクセスします。
XML/HTML コードコンテンツをクリップボードにコピー
- >
- <html>
-
<ボディ>
-
- <スクリプト type="text/ javascript">
- if( sessionStorage.hits ){
- sessionStorage.hits = 番号(sessionStorage.hits) 1;
}else{ -
- sessionStorage.hits = 1;
}
- document.write("合計ヒット数:" sessionStorage.hits);
スクリプト- >
<
p- >ヒット数を増やすにはページを更新してください。 p>
<
p- >ウィンドウを閉じ、再度開いて結果を確認します。 p>
-
ボディ- >
html- >
ローカル ストレージ
_Local Storage_ は、複数のウィンドウにまたがって保存されるように設計されており、現在のセッションで永続化されます。特に、Web アプリケーションでは、パフォーマンス上の理由から、ユーザーによって書かれたドキュメント全体やユーザーのメールボックスなど、数百万バイトのユーザー データをクライアントに保存する必要がある場合があります。
Cookie はリクエストごとに送信されるため、この状況にはあまりうまく対処できません。
例
HTML5 では、時間制限なしでページのローカル ストレージ領域にアクセスするために使用できる localStorage 属性が導入されました。このページを使用するときはいつでもローカル ストレージを利用できます。
次のコードは、このページにアクセスするたびに、次回ウィンドウを開いたときでもアクセスできるローカル ストレージ変数を設定します。
XML/HTML コードコンテンツをクリップボードにコピー
- >
- <html>
-
<ボディ>
-
- <スクリプト type="text/ javascript">
- if( localStorage.hits){
- localStorage.hits = 番号(localStorage.hits) 1;
}else{ -
- localStorage.hits = 1;
}
- document.write("合計ヒット数:" localStorage.hits);
スクリプト- >
<
p- >ヒット数を増やすにはページを更新してください。 p>
<
p- >ウィンドウを閉じ、再度開いて結果を確認します。 p>
-
ボディ- >
html- >
上記の概念は簡単に学べます - オンラインで練習してください。
Web ストレージを削除します
ローカル マシンに機密データを保存すると危険があり、セキュリティ ホールが残る可能性があります。
_セッション保存データ_は、セッション終了直後にブラウザによって削除されます。
ローカル ストレージ設定をクリアするには、localStorage.remove('key') を呼び出す必要があります。この 'key' は、削除する値に対応するキーです。すべての設定をクリアしたい場合は、localStorage.clear() メソッドを呼び出す必要があります。
次のコードはローカル ストレージを完全にクリアします:
XML/HTML コード
コンテンツをクリップボードにコピー
- >
- <html>
-
<ボディ>
-
-
<スクリプト type="text/ javascript">
- localStorage.clear();
-
- // ヒット数をリセットします。
- if( localStorage.hits ){
- localStorage.hits = 番号(localStorage.hits) 1;
- }else{
- localStorage.hits = 1;
- }
- document.write("Total Hits :" localStorage.hits );
- スクリプト>
-
<p>ページを更新してもヒットカウンターは増加しません。p>
-
<p>ウィンドウを閉じて、再度開き、結果を確認します。 p>
-
-
ボディ>
-
html>
Web SQL データベース API
Web SQL データベース API は HTML5 規格の一部ではありませんが、SQL 操作を使用するゲスト データベースの API が組み込まれた独立した規格です。
核心メソッド
以下は、この教義で定義される 3 つの核心メソッドです。
openDatabase: このメソッドは、既存のデータベースまたは新しく作成されたデータベースを使用して、データ オブジェクト オブジェクトを作成します。 SQL を実行
データベースを開始します
データベースが存在する場合、openDatabase メソッドはデータベースを開始し、存在しない場合はこのメソッドが作成します。
次の番号コードを使用してデータ パッケージを作成および公開できます:
JavaScript コード
复制コンテンツ到剪贴板
var-
db = openDatabase('mydb','1.0'、'テスト DB'、2 * 1024 * 1024);
上記のメソッドは次の 5 つのパラメータを受け入れます:
データベース名
バージョン番号
説明テキスト
データベースサイズ
作成コールバック
最後と5番目のパラメータである作成コールバックは、データベースの作成後に呼び出されます。ただし、この機能がなくても、ランタイムはデータベースと正しいバージョンを作成します。
クエリを実行する
クエリを実行するには、database.transaction() 関数を使用する必要があります。この関数は 1 つのパラメーターを受け取ります。これは、以下に示すように、クエリを実際に実行する役割を担う関数です。
JavaScript コードコンテンツをクリップボードにコピーします
- var db = openDatabase('mydb', '1.0'、'テスト DB'、2 * 1024 * 1024);
db.transaction(
関数-
(tx) {
tx.executeSql(
'ログが存在しない場合はテーブルを作成 (ID は一意、ログ)'-
);
});
-
上記のクエリ ステートメントは、「mydb」データベースに LOGS というテーブルを作成します。
挿入操作
テーブルにエントリを作成するには、次のように単純な SQL クエリを上の例に追加します。
JavaScript コード
コンテンツをクリップボードにコピーします
var
db = openDatabase(
'mydb'- , '1.0'、'テスト DB'、2 * 1024 * 1024);
db.transaction(関数 (tx) {
tx.executeSql(-
'ログが存在しない場合はテーブルを作成 (ID は一意、ログ)');
tx.executeSql(
'INSERT INTO LOGS (id, log) VALUES (1, "foobar")'-
);
tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "logmsg")'
);
-
});
エントリの作成時に次のように動的な値を渡すこともできます: -
JavaScript コードコンテンツをクリップボードにコピーします
-
var
db = openDatabase('mydb'
, '1.0'、
'テスト DB'
- 、2 * 1024 * 1024);
db.transaction(関数 (tx) {
tx.executeSql('ログが存在しない場合はテーブルを作成 (ID は一意、ログ)');
tx.executeSql('INSERT INTO ログ
-
(id,log) VALUES (?, ?'), [e_id, e_log];
}); -
ここで、e_id と e_log は外部変数であり、executeSql は配列パラメータの各エントリを「?」にマップします。
読み取り操作
既存のレコードを読み取るには、次のようにコールバックを使用して結果をキャプチャできます:
JavaScript コードコンテンツをクリップボードにコピーします
-
var db = openDatabase('mydb', '1.0'、'テスト DB'、2 * 1024 * 1024);
db.transaction(
- 関数 (tx) {
tx.executeSql(
- 'ログが存在しない場合はテーブルを作成 (ID は一意、ログ)');
tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "foobar")'
- );
tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "logmsg")');
- });
db.transaction(関数
- (tx) {
- tx.executeSql('SELECT * FROM LOGS', [], 関数
- (tx, results) {
var len = results.rows.length, i;
msg =
- "
見つかった行: " len "
"; -
document.querySelector('#status').innerHTML =
- for (i = 0; i < len; i ){
アラート(results.rows.item(i).log);
-
}
}、
- null);
- });
-
最後の例最後に、この例を次のような完全な HTML5 ドキュメントに組み込み、Safari で実行してみましょう:
JavaScript コード- コンテンツをクリップボードにコピーします
-
-
- <頭>
-
-
-
-
"ステータス" name="ステータス">ステータスメッセージ
-
-