共有オブジェクト(「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)
{
// Shared object doesn't exist.
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)
{
// Shared object doesn't exist.
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)
{
// Shared object doesn't exist.
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 より大きくなっているため、共有オブジェクト作成時からの経過時間をトレース出力します。
共有オブジェクトに保存する値は、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]);
}
getLocal() または getRemote() でローカルまたはリモートの SharedObject を作成する際にオプションの secure というパラメータを指定すると、その共有オブジェクトについて、HTTPS 経由で配信される SWF ファイルのみにアクセスを制限するかどうかを定義できます。HTTPS 経由で配信される SWF ファイルにおいて、このパラメータに true を指定すると、セキュアな共有オブジェクトを新しく作成、または既存のセキュアな共有オブジェクトに対する参照を取得できます。このセキュアな共有オブジェクトは、HTTPS 経由で配信される SWF ファイルで、secure パラメータに true を指定して SharedObject.getLocal() を呼び出した場合に限り読み書きできます。HTTPS 経由で配信される SWF ファイルにおいて、このパラメータに false を指定すると、Flash Player は共有オブジェクトを新しく作成するか、既存の共有オブジェクトに対する参照を取得します。
この場合の共有オブジェクトは 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.");
}
このパラメータの値にかかわらず、作成された共有オブジェクトは、各ドメインに割り当てられた総ディスク容量の一部を使用します。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート