Cookieを使用しないJavaScriptセッション変数

JavaScript での Cookieの実装が好きではありませんでした。 ボリュームは制限されており(ドメインごとに4x20 Kb)、文字列型でのみ保存でき、Cookieをインストールおよび受信するための構文は非常に複雑です。



さらに、ブラウザーはリクエストヘッダーにCookieを追加します。多くの企業のファイアウォールでは特定のサイズのヘッダーのみが許可されているため、ページがまったく読み込まれない場合があります(ひどいことです)



したがって、CookieをインストールせずにJavascriptでセッション変数を使用できるようにする小さなスクリプトを作成しました。 これにより、最大2 MBのデータを保存できます。これは、Cookieベースのソリューションよりも機能の制限がはるかに少なくなります。



セッション変数を使用する他のスクリプトの前でセッション変数を使用するページのヘッドセクションにsessvars.js (6 Kb)を挿入します。



使い方



これで、 sessvarsというオブジェクトを自由に使用できます。 Javascriptの他の通常のオブジェクトと同じように機能します。変数を追加して、値を変更できます。 唯一の違いは、ページ間を移動するときにsessvarsが消えないことです。 つまり、スクリプトが次のようなことをする場合:
sessvars.myObj = {名前: "トーマス"、年齢:35}
1ページで、ユーザーが現在のセッションでアクセスする他のページでsessvars.myObjオブジェクトにアクセスできます。



例を試す



方法



触れてはならないsessvarsオブジェクトの唯一のプロパティ変数は$です 。これには、多くの便利なメソッドが含まれているためです。





sessvarsの動作を設定できるさまざまなフラグもあります。



データはどこに保存されますか?



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はそうではないため、それらを傍受するのはより困難です。






All Articles