[PHP]データの受け渡しについて(Hidden,Cookie,Session)

なんとなくPHPを勉強中。

ページ遷移した際のデータの受け渡しの方法はざっと3種類。

※今回の例としたシチュエーションはメールフォームのようなもの
1ページ目で、メールフォームにデータ入力して確認ボタンを押すと、
2ページ目には1ページ目で入力した内容が表示されている、って感じ。

◆データ受け渡し方法
1)htmlのinput要素で渡す
2)PHP(もしくはJavascript)でcookieに保持する
3)PHPでsessionに保持する

1)はブラウザ内での受け渡しとなるので容易に改ざんできる。
2)はユーザーのHDDにデータが保持されるがデータを抜かれる可能性あり
3)はサーバーのHDDにデータが保持される。sessionIDが盗まれなければデータは抜かれない。

セキュリティ的な効果は、
1) < 2) < 3) ※3)も絶対に安全かといえばそうでもない。 去年やった仕事でsessionIDを読み込んでうんちゃらかんちゃらってのがあったのだけど、意味がよくわかってなかった。 ようは、サーバーのHDDにデータが残せるCookieみたいな仕組みってことなのね。 Javaでもsession管理はできるみたいだから、サーバーサイドのプログラムなら使えるってことなのかな。

[PHP]PHPでBasic認証を突破する方法(IDとPASSWORDがわかっている状態で)

すぐ忘れるのでmemoする。

http://ユーザー名:パスワード@ドメイン名という感じ。
たとえば、http://www.hoge.comがBasic認証かかっていて、
ID:sakusan、PASSWORD:hogeo、というIDとPASSの場合は、

http://sakusan:hogeo@www.hoge.com

こんな感じでいいと思う。

参考:PHPでBASIC認証のかかったページに接続(ログイン)する方法:MiuxMiu

[AS][PHP]GMT(正確にはUTC)タイムを取得する方法

ローカルの時間(PCに設定されてる時計による)ではなく、正確な時間を取得したい場合。
ただFLASH単体では、UTC(GMTみたいなもの)の取得はできないようす。
なのでサーバーサイドのプログラムPHPを使ったら意外と簡単にできました。

↓PHPはこれだけ

<?php
//GMTを取得
$time09 = gmdate("D M d Y H:i:s", time()+9*60*60);
//ASでは、utc_timeというプロパティで扱える
echo "utc_time=".$time09
?>

FLASH側はこんな感じで、読み込みます。
以下、フレームアクション

//フレームアクション
//PHPファイルのURLを定義
var request:URLRequest = new URLRequest ( "get_utc.php" );
//送信方法をPOSTに
request.method = URLRequestMethod.POST;

//ローダーを作って、PHPを読み込み(実行)
var loader:URLLoader = new URLLoader (request);
loader.addEventListener(Event.COMPLETE, onComplete);
loader.load(request);

//PHP読み込み(実行)後の処理
function onComplete(event:Event):void {
	//↓PHPからの戻り値を変数に格納
	var vars:URLVariables = new URLVariables( event.target.data );
	//UTCデータを格納するための変数
	var utc:String;
	//データがちゃんとあった場合は、
	if (vars.utc_time!= undefined) {
		//変数に、文字列を渡す
		utc = vars.utc_time;
		next(utc);
		//ムービープレビューのときはローカルタイムを取得
	} else {
		var date:Date = new Date();
		utc = date.toString();
		next(utc);
		tf.text = "↓ローカルタイムです";
	}
}
//PHPから読み込んだ文字列を引数にしてDateインスタンスを作成で完了
function next(utc) {
	var date:Date = new Date(utc);
	tf2.text = String(date);
}

//結果表示用のテキストフィールド(2つ用意)
var tf:TextField = new TextField();
tf.autoSize ="left";
addChild(tf);
var tf2:TextField = new TextField();
tf2.autoSize ="left";
addChild(tf2);
tf2.y = 30;

ポイントはPHPから取得した文字列をそのままDateクラスのコンストラクタの引数に突っ込めば、その情報を持ったDateインスタンスが作れるところですかね。
(逆に言うと、PHPで取得する文字列は、Dateクラスで認識できる形にしてあげる必要があるってことかね)

ただこの場合の「UTCタイム」はサーバーの時計ってことになるのかな?
ってことは、サーバーの時計が狂ったらアウトってことなんだろうね。

[PHP,AS]FLASHで別ドメインのファイルを読む用

//PHP(read.php)
<?php
$rss = @file_get_contents('http://http://memo.393.bz/?feed=rss2');
print $rss;
?>

※もしくはこっちでもOK

<?php
//ファイルを開く(UNIXではモードを r に変更)
if (!($fileTxt = fopen ("consume.xml", "rb"))) {
die("ファイルが開けません。");
}
//ファイルの読み込み
while (!feof($fileTxt)) {
$vTxt = fread ($fileTxt, 4096);
}
//ファイルを閉じる
fclose($fileTxt);
//ファイルの出力
echo $vTxt;
?>
//AS(ステージにインスタンス名_txtのダイナミックテキストを配置)
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, xComplete);
function xComplete (e:Event):void {
var xml:XML= new XML(e.target.data);
_txt.text = xml;
}
urlLoader.load(new URLRequest("read.php"));