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

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

  • 2006-12-23 (土) 0:48
  • PHP
この記事の所要時間: 048

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

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

つまり

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

<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
session_start();
$_SESSION&#91;'count'&#93; = 1;

$url = sprintf("./%s/user.swf", session_id());
?>
<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]に書き換えます。

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

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

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

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に渡され、セッションを取得することができます。

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

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

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

< ?php
session_start();
if (isset($_SESSION&#91;'count'&#93;)) {
  printf("count=%d", $_SESSION&#91;'count'&#93;);
  $_SESSION&#91;'count'&#93;++;
} else {
  print("count=-1");
}
?>

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

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

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

Pocket

follow us in feedly

トラックバック:2

このエントリーのトラックバックURL
http://www.1x1.jp/blog/2006/12/flashlite11_php_session.html/trackback
Listed below are links to weblogs that reference
Flash Lite1.1とPHPセッションの連携 from Shin x blog
pingback from maxfactory | Flash lite(携帯Flash)、Flex、widgetなどの技術メモ » [flash lite]session管理 09-06-23 (火) 10:34

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

pingback from 裏マニュアル 改 » Blog Archive » 技術関係のお役立ちサイト 10-01-29 (金) 11:22

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

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

検索
フィード
メタ情報

Return to page top