iPhone/iPadのホーム画面コンテスト開催中!賞品は iTunes カード!

PHP 2006/12/23 00:48

Flash Lite1.1とPHPセッションの連携

Flash Lite1.1では起動時にSWFに値を渡す方法(URLパラメータやparamタグ)が使えないようなので、SWFにセッションIDを渡すことができません。
そのためloadVariable()等でサーバと通信できても、セッションが特定できないので、ユーザを識別するようなアプリケーション(ゲームや会員向けサイト等)には使えませんでした。

そこでSWFにセッションIDが渡せないならばと、URLにセッションIDを含める方法を考えました。

つまり

HTML:
  1. <a href="/path/to/hoge.swf?PHPSESSID=phpsessid">SWF</a>

HTML:
  1. <a href="/path/to/phpsessid/hoge.swf">SWF</a>

とするわけです。

ファイル構成

以下のようなファイル構成を想定しています。

[/path/to]
    + .htaccess
    + user.swf   < --- SWF
    + index.php  <--- セッション開始PHP
    + user.php   <--- ユーザデータ出力PHP

処理の流れ

おおまかな流れです。

  1. index.phpでセッション開始
    セッションIDを含めたURL[/path/to/phpsessid/user.swf]を生成
  2. [/path/to/phpsessid/user.swf]に来たリクエストをmod_rewriteで[/path/to/user.swf]に変換
  3. user.swfからloadVariable()でuser.phpを呼ぶ
  4. [/path/to/phpsessid/user.php]に来たリクエストをmod_rewriteで[/path/to/user.php?PHPSESSID=phpsessid]に変換
  5. user.phpでセッションデータを出力する

1. セッション開始・user.swfへのリンク生成[index.php]

セッションを開始するPHPファイルです。セッションに初期値をセットしておきます。(会員向けアプリケーションならここでログイン処理などを行います。)

あとuser.swfへのリンクを表示します。このリンクにはURLにセッションIDを含めるようにしておきます。

PHP:
  1. <?php
  2. $_SESSION['count'] = 1;
  3.  
  4. $url = sprintf("./%s/user.swf", session_id());
  5. ?>
  6. <a herf="<?php echo $url ?>">SWF</a>

2. user.swfを出力 [.htaccess]

1.のリンクをクリックすると[/path/to/phpsessid/user.swf]にリクエストが来ます。当然そのようなURLは無いのでmod_rewriteでURLを[/path/to/user.swf]に書き換えます。

CODE:
  1. RewriteEngine On
  2. RewriteRule ^[0-9A-Za-z]+/user\.swf user.swf

3. user.swfからuser.phpを呼ぶ [user.swf]

user.swfからセッションのデータを取得するためにuser.phpにリクエストを投げます。ここでURLを相対パスで書くのがポイントです。

CODE:
  1. loadVariable('user.php');

4. user.phpを呼び出す [.htaccess]

3.から[/path/to/phpsessid/user.php]にリクエストが来ます。これをmod_rewriteでURLを[/path/to/user.php?PHPSESSID=phpsessid]に書き換えます。

これすればセッションIDがuser.phpに渡され、セッションを取得することができます。

CODE:
  1. RewriteEngine On
  2. RewriteRule ^[0-9A-Za-z]+/user\.swf user.swf
  3. # ↓を追加
  4. RewriteRule ^([0-9A-Za-z]+)/user\.php user.php?PHPSESSID=$1

5. user.phpからセッションデータを出力 [user.php]

4.でセッションIDが渡されているので、あとは通常とおりセッション処理を記述すればokです。

PHP:
  1. <?php
  2. if (isset($_SESSION['count'])) {
  3.   printf("count=%d", $_SESSION['count']);
  4.   $_SESSION['count']++;
  5. } else {
  6.   print("count=-1");
  7. }
  8. ?>

今回はPHPのセッションIDを使ったのですが、ようはユーザ(セッション)を識別できれば良いので一意なものであればトークンでも何でも良いです。

分かってしまえば簡単なのですが、思いつくまではかなり悩みました。。。

Lite 1.1上の開発は色々と大変なので誰かのお役に立てれば嬉しいです、はい。



■Related Posts

2 Responses to “Flash Lite1.1とPHPセッションの連携”

  1. on 23 6月 2009 at 10:34 1.maxfactory | Flash lite(携帯Flash)、Flex、widgetなどの技術メモ » [flash lite]session管理 said …

    [...] http://www.1×1.jp/blog/2006/12/flashlite11_php_session.html カテゴリー: 未分類 タグ: コメント (0) トラックバック (0) コメントをどうぞ トラックバックURL [...]

  2. on 29 1月 2010 at 11:22 2.裏マニュアル 改 » Blog Archive » 技術関係のお役立ちサイト said …

    [...] //–Flash Lite1.1とPHPセッションの連携 http://www.1×1.jp/blog/2006/12/flashlite11_php_session.html [...]

Trackback This Post | Subscribe to the comments through RSS Feed

Leave a Reply