ねもぷらす

ふぁいんでぃんぐねもの日記。プログラミングとか育児とか

swf で cookie は使えるのか?

Flash で CGI を実行する方法がわからず調査。
そもそも Flash を作ったこと無いし、ActionScript ってナニに対して書けるのかもわからない始末。
30日間は無料で使えるようなので入れてみたけどナニコレわかりませんorz


自分、開発は vi っすから。


とりあえず目的の情報。

  • getURL(): CGI から返された値をブラウザが受け取る
  • loadVariables()、loadVariablesNum(): 返された値を Flash が受け取る
  • loadMovie()、loadMovieNum(): 返された Flash を Flash が受け取る


loadVariables を使えば良いらしい。
アニメーションを作るとかレベルの高いことは一切できないし用語もわからんので、とりあえず丸を描いてボタン化してみる。

  1. 「ツール」で 「○」 を選んで、適当に円を描く
  2. 「ツール」の黒矢印で作った円を選択
  3. 右クリックでメニューを出して、「シンボルに変換」を選択
  4. タイプを「ボタン」にする。ほかは特に変更せず「OK」を選択。
  5. 作った円を選択して、「アクション」で以下の ActionScript を記載する。
on (press) {
    loadVariables("http://127.0.0.1/cgi-bin/cookie.cgi", _root, "POST");
    gText = cookie;
}
  1. CGIからの戻り値を書き出す先(ここでは gText )を作成する
    1. 「ツール」から「テキストツール」を選択する。
    2. 適当な大きさのテキスト窓を描く。
    3. テキスト窓のプロパティで、「ダイナミックテキスト」を選択。
    4. 変数名を gText とする。

以上で Flash は調整終了。
「ファイル」→「ムービーの書き出し」で swf として保存。
書き出しのオプションが出てきたけどよくわからーん(汗
そのまま OK にしました。

  1. cookie.cgi はこう書いておいた。cookie をパースするのが面倒という理由で use CGI。
#!/usr/local/bin/perl -w
use strict;
use CGI;

my $q = new CGI;
my $value  = $q->cookie("name") || 'cookie';
   $value .= "_hoge";

print <<HTML;
Status: 200
Content-Type: text/plain; charset=utf-8
Set-Cookie: cookie=$value; expires=Tue, 1-Jan-2030 00:00:00 GMT;

cookie=$value
HTML


さて、ローカルから CGI へアクセスして見ますかー
サーバ側のアクセスログを監視しつつ、直接 swf 開いてボタンをクリック。

あれ、POST にしたはずなのに、GET で送ってる…
そして cookie どころか戻り値を取得できず。


おかしーなーと思いつつ、もう一度ポチっとな。
を、今度は上手く行った、メソッドも POST …でも一個前の cookie 情報が返ってきてる??


なんだべなーとりあえず cookie 削除してみるか。って、あれ、フラッシュプレーヤはどこに cookie 保存しているの??


取り急ぎで組んだ CGI は cookie サイズが どんどん×2 増えていくわけで。
消したいんですけどー?


まぁ、cookie 使えるっポイことはわかったのでオゲ。
サーバ側に FTP して URL ベースでブラウザからアクセスしたら、ちゃんと ブラウザの cookie 使ってました。
あと心配なのは、クロスドメインしても大丈夫なのかとかかなぁ…
まぁ ローカルファイルから CGI 直で叩いても cookie 取れてるっポイから大丈夫なんでしょうけど。


いい勉強になりました。
全部ネットで調べようかと思ったけど挫折を重ね、本屋をめぐってバイブルっぽい本に行き着いたのが日ごろの行いのよさってことで。


macromedia FLASH ActionScriptバイブルfor Windows & Macintosh

macromedia FLASH ActionScriptバイブルfor Windows & Macintosh



Pure*1 Perl プログラマ。趣味以外で多言語には触れず、DB まわりは他力本願…
将来が不安。

*1:Poor?