ローカルデータの保存

"Flash cookie" とも呼ばれる共有オブジェクトは、アクセスしたサイトによってコンピュータ上に作成されるデータファイルです。ほとんどの場合、共有オブジェクトは、ユーザーが頻繁にアクセスする Web サイトの外観をパーソナライズする場合など、Web ブラウジングの操作性を向上するために使用されます。共有オブジェクト自体がコンピュータ上にあるデータにアクセスすることはできません。さらに重要な点は、ユーザーが意図的に情報を提供しない限り、共有オブジェクトがユーザーの電子メールアドレスやその他の個人情報にアクセスしてデータを記憶することはできないということです。

新しい共有オブジェクトのインスタンスは、静的な SharedObject.getLocal() メソッドまたは SharedObject.getRemote() メソッドを使用して作成することができます。getLocal() メソッドでは、現在のクライアントだけがアクセスできるローカルの永続共有オブジェクトに対してロードを試みます。一方、getRemote() メソッドでは、何らかのサーバー (Flash Media Server など) によって複数クライアントでの共有ができるリモートの共有オブジェクトに対してロードを試みます。目的のローカル共有オブジェクトやリモート共有オブジェクトが存在しない場合、getLocal() メソッドと getRemote() メソッドは新しい SharedObject インスタンスを返します。

次のコードでは、test というローカル共有オブジェクトをロードしようとしています。この共有オブジェクトが存在しなければ、指定した名前の新しい共有オブジェクトが作成されます。

var so:SharedObject = SharedObject.getLocal("test");
trace("SharedObject is " + so.size + " bytes");

test という名前の共有オブジェクトが見つからない場合、サイズが 0 バイトの新しい共有オブジェクトが作成されます。該当する共有オブジェクトが既に存在する場合は、現在のサイズ (バイト単位) が返されます。

共有オブジェクトにデータを格納するには、次のようにデータオブジェクトに値を割り当てます。

var so:SharedObject = SharedObject.getLocal("test");
so.data.now = new Date().time;
trace(so.data.now);
trace("SharedObject is " + so.size + " bytes");

名前が test でパラメータが now に設定された共有オブジェクトが既に存在する場合、既存の値は上書きされます。共有オブジェクトが既に存在するかどうかを確認するには、次の例に示すように、SharedObject.size プロパティを使用します。

var so:SharedObject = SharedObject.getLocal("test");
if (so.size == 0)
{
    // 共有オブジェクトは存在しない
    trace("created...");
    so.data.now = new Date().time;
}
trace(so.data.now);
trace("SharedObject is " + so.size + " bytes");

前のコードでは、size パラメータを使用して、指定された名前を持つ共有オブジェクトインスタンスが既に存在するかどうかを確認しています。次のコードでは、実行するたびに共有オブジェクトを改めて作成します。共有オブジェクトをユーザーのハードディスクに保存するには、次の例に示すように、SharedObject.flush() メソッドを明示的に呼び出す必要があります。

var so:SharedObject = SharedObject.getLocal("test");
if (so.size == 0)
{
    // 共有オブジェクトは存在しない
    trace("created...");
    so.data.now = new Date().time;
}
trace(so.data.now);
trace("SharedObject is " + so.size + " bytes");
so.flush();

flush() メソッドを使用してユーザーのハードディスクに共有オブジェクトを書き込む場合は、次の例に示すように、Flash Player の設定マネージャ (www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager07.html) を使用してローカル記憶域を明示的に無効にしてあるかどうかを慎重に確認する必要があります。

var so:SharedObject = SharedObject.getLocal("test");
trace("Current SharedObject size is " + so.size + " bytes.");
so.flush();

共有オブジェクトの data プロパティ内でプロパティの名前を指定することにより、共有オブジェクトから値を取得することができます。たとえば、次のコードでは、SharedObject インスタンスが作成された時点からの経過時間 (分単位) を Flash Player に表示します。

var so:SharedObject = SharedObject.getLocal("test");
if (so.size == 0)
{
    // 共有オブジェクトは存在しない
    trace("created...");
    so.data.now = new Date().time;
}
var ageMS:Number = new Date().time - so.data.now;
trace("SharedObject was created " + Number(ageMS / 1000 / 60).toPrecision(2) + " minutes ago");
trace("SharedObject is " + so.size + " bytes");
so.flush();

前のコードを初めて実行すると、test という名前の新しい SharedObject が初期サイズ 0 バイトで作成されます。初期サイズは 0 バイトで if ステートメントの条件が true になるため、now という新しいプロパティが共有オブジェクトに追加されます。共有オブジェクト作成時からの経過時間は、現在時刻から now プロパティの値を減算して求めています。以後、このコードが再度実行される際には共有オブジェクトのサイズが 0 より大きくなっているため、共有オブジェクト作成時からの経過時間をトレース出力します。

サブトピック

共有オブジェクトのコンテンツの表示
セキュアな SharedObject の作成

共有オブジェクトのコンテンツの表示

共有オブジェクトに保存する値は、data プロパティ内に格納されます。ループで共有オブジェクトインスタンス内の個々の値にアクセスするには、次のように for..in ループを使用します。

var so:SharedObject = SharedObject.getLocal("test");
so.data.hello = "world";
so.data.foo = "bar";
so.data.timezone = new Date().timezoneOffset;
for (var i:String in so.data)
{
    trace(i + ":\t" + so.data[i]);
}

セキュアな SharedObject の作成

getLocal() または getRemote() でローカルまたはリモートの SharedObject を作成する際にオプションの secure というパラメータを指定すると、その共有オブジェクトについて、HTTPS 経由で配信される SWF ファイルのみにアクセスを制限するかどうかを定義できます。HTTPS 経由で配信される SWF ファイルにおいて、このパラメータに true を指定すると、セキュアな共有オブジェクトを新しく作成、または既存のセキュアな共有オブジェクトに対する参照を取得できます。このセキュアな共有オブジェクトは、HTTPS 経由で配信される SWF ファイルで、secure パラメータに true を指定して SharedObject.getLocal() を呼び出した場合にのみ読み書きできます。HTTPS 経由で配信される SWF ファイルにおいて、このパラメータに false を指定すると、共有オブジェクトを新しく作成、または既存の共有オブジェクトに対する参照を取得でき、

この場合の共有オブジェクトは HTTPS 以外の接続を経由して配信される SWF ファイルからも読み書きできます。HTTPS 以外の接続を経由して配信される SWF ファイルにおいて、このパラメータに true を指定しようとすると、新しい共有オブジェクトの作成 (または既存のセキュアな共有オブジェクトへのアクセス) に失敗してエラーがスローされ、共有オブジェクトには null が設定されます。次のコードを、HTTPS 以外の接続を経由して配信される SWF ファイルで実行しようとすると、SharedObject.getLocal() メソッドでエラーがスローされます。

try
{
    var so:SharedObject = SharedObject.getLocal("contactManager", null, true);
}
catch (error:Error)
{
    trace("Unable to create SharedObject.");
}

このパラメータの値にかかわらず、作成された共有オブジェクトは、各ドメインに割り当てられた総ディスク容量の一部を使用します。


 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000319.html