さらに、ブラウザーはリクエストヘッダーにCookieを追加します。多くの企業のファイアウォールでは特定のサイズのヘッダーのみが許可されているため、ページがまったく読み込まれない場合があります(ひどいことです)
したがって、CookieをインストールせずにJavascriptでセッション変数を使用できるようにする小さなスクリプトを作成しました。 これにより、最大2 MBのデータを保存できます。これは、Cookieベースのソリューションよりも機能の制限がはるかに少なくなります。
セッション変数を使用する他のスクリプトの前でセッション変数を使用するページのヘッドセクションにsessvars.js (6 Kb)を挿入します。
使い方
これで、 sessvarsというオブジェクトを自由に使用できます。 Javascriptの他の通常のオブジェクトと同じように機能します。変数を追加して、値を変更できます。 唯一の違いは、ページ間を移動するときにsessvarsが消えないことです。 つまり、スクリプトが次のようなことをする場合:
sessvars.myObj = {名前: "トーマス"、年齢:35}1ページで、ユーザーが現在のセッションでアクセスする他のページでsessvars.myObjオブジェクトにアクセスできます。
例を試す
方法
触れてはならないsessvarsオブジェクトの唯一のプロパティ変数は$です 。これには、多くの便利なメソッドが含まれているためです。
- sessvars。$。clearMem()
sessvarsをきれいにします - sessvars。$。usedMem()
使用メモリ量をキロバイト単位で返します - sessvars。$。usedMemPercent()
使用可能なメモリの量を、可能な総量の割合として返します - sessvars。$。debug()
ページの上部にデバッグウィンドウを表示します(上記の例のように) - sessvars。$。flush()
別のページへの移行が完了したときにすべてのデータが保存されるように、sessvarsの現在の状態を明示的に保存します。 通常の状況では、これはアンロードイベント中に自動的に行われるため、これはほとんど必要ありません。
旗
sessvarsの動作を設定できるさまざまなフラグもあります。
- sessvars。$。prefs.memlimit
デフォルトは2000です
sessvarsに保存できるデータの量をKB単位で指定します。 Opera 9.25にはこの数を超える制限があるため、デフォルトは2000 Kbです。 他のブラウザー(IE7.0、Firefox 1.5 / 2.0およびSafari 3.0)には非常に高い制限があります-これらのブラウザーでは10 MBは難しくありません。 - sessvars。$。prefs.autoFlush
true / false、デフォルトはtrue
flush()が自動的に呼び出されるかどうかを決定します - sessvars。$。prefs.crossDomain
true / false、デフォルトはfalse
フラグがtrueに設定されている場合、sessvarsのコンテンツは異なるドメインから読み取ることができます(両方のサイトがsessvars.jsを使用している場合)。 - sessvars。$。prefs.includeFunctions
true / false、デフォルトはfalse
sessvarsが関数を保存するかどうかを決定します。 - sessvars。$。prefs.includeProtos
true / false、デフォルトはfalse
trueの場合、さまざまなデータまたはオブジェクトのプロトタイプに割り当てられたプロパティが保存されます。 ほとんど必要ありません。
データはどこに保存されますか?
sessvars.jsの基礎となる原則は非常に単純です。
JavaScriptでwindow.nameプロパティを設定できるという事実を使用しました。このプロパティは、通常、スクリプトから名前でアクセスできるようにウィンドウとフレームに名前を付けるために使用されます。 フレームセットでこれと重複しないように(誰かがまだ使用している場合)、私のスクリプトはtop.nameプロパティのみを使用します。
window.nameの注目すべき機能は、この値がページの読み込み(およびドメイン)の間でも保持され、非常に長い名前を保存できることです。 不快な点は、このプロパティでは文字列データ型のみが許可されるため、 JSON stringifierを使用してデータをシリアル化/逆シリアル化することです。
そして最後に、sessvarsで何かを変更するたびにデータを手動で保存する必要をなくすウィンドウアンロードイベントハンドラーを追加しました。
セキュリティの問題
sessvarsにはドメイン間で使用するためのフラグがありますが、デフォルト値はfalseですが、他のサイトのwindow.nameプロパティから誤ってガベージを取得しないようにします。 実際、データは他のサイトの他のスクリプトから完全にアクセスでき、誰でもブラウザのアドレスバーでjavascript:alert(window.name)を作成できます。
したがって、パスワード、クレジットカード番号などの重要な情報をsessvarsに保存しないでください。
ただし、状況によっては、sessvarsはcookieより安全です-cookieの内容はリクエストでサーバーに送信され、window.nameはそうではないため、それらを傍受するのはより困難です。