- 2006-12-23 (土) 0:48
- PHP
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
処理の流れ
おおまかな流れです。
- index.phpでセッション開始
セッションIDを含めたURL[/path/to/phpsessid/user.swf]を生成 - [/path/to/phpsessid/user.swf]に来たリクエストをmod_rewriteで[/path/to/user.swf]に変換
- user.swfからloadVariable()でuser.phpを呼ぶ
- [/path/to/phpsessid/user.php]に来たリクエストをmod_rewriteで[/path/to/user.php?PHPSESSID=phpsessid]に変換
- user.phpでセッションデータを出力する
1. セッション開始・user.swfへのリンク生成[index.php]
セッションを開始するPHPファイルです。セッションに初期値をセットしておきます。(会員向けアプリケーションならここでログイン処理などを行います。)
あとuser.swfへのリンクを表示します。このリンクにはURLにセッションIDを含めるようにしておきます。
< ?php session_start(); $_SESSION['count'] = 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['count'])) { printf("count=%d", $_SESSION['count']); $_SESSION['count']++; } else { print("count=-1"); } ?>
今回はPHPのセッションIDを使ったのですが、ようはユーザ(セッション)を識別できれば良いので一意なものであればトークンでも何でも良いです。
分かってしまえば簡単なのですが、思いつくまではかなり悩みました。。。
Lite 1.1上の開発は色々と大変なので誰かのお役に立てれば嬉しいです、はい。
- Newer: CakePHP1.1.12.4205&1.2.0.4206_devリリース
- Older: Java風なメソッド呼び出し
トラックバック:2
- このエントリーのトラックバックURL
- /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 […]