- PR -

[PHP]POST変数を格納したセッション変数のフレーム間での利用について

1
投稿者投稿内容
dudu2
会議室デビュー日: 2003/09/20
投稿数: 15
投稿日時: 2005-03-08 11:47
こんにちは、dudu2です。

PHPにて、フレーム構成のページを作成しております。
ページ呼び出し時にpost変数を渡しており、このpost変数をセッション変数に格納することで、フレームを構成する各ページにて再利用できるようにしたいと考えております。

まず、post変数をセッション変数に格納し、同一セッション内で利用可能か確認するために、ソース1を作成し、動作の確認を得ました。
次に要件を満たすためにソース2を作成し動作確認を行ったのですが、セッション変数から格納したはずのpost変数を取得することができませんでした。

通常のページ呼び出しと、frameset内でのページ呼び出しではセッション維持の動作が異なるのかなと思っておりますが、解決策をお教えいただきたく思います。
宜しくお願い致します。

[開発環境]
Windows2000Server + SP4
IIS5.0
PHP4.3.10


[ソース]
ソース0:呼び出し元html
ソース1:単一ページ
ソース2:フレーム構成ページ

[ソース0]
<html>
<body>
<form method="post" action="./test_session.php">
<input type="hidden" name="POST変数(キー)" value="POST変数(値)" />
<input type="submit" value="適用" />
</form>
</body>
</html>

[ソース1]
<?php
session_start();

$mode = $_GET['mode'];

// session変数のキーと値を表示
foreach($_SESSION as $key => $value){
print($key . ":" . $value . "<br />\n");
}

print("<html>");
print("<body>");
print("header<br />");
// session変数のキーと値を表示
foreach($_SESSION as $key => $value){
print($key . ":" . $value . "<br />\n");
}
print("</body>");
print("</html>");
?>


[ソース2]
<?php
session_start();

$mode = $_GET['mode'];

// 処理振り分け
// フレーム作成
if ($mode == "") {
// post変数をsession変数にセット
foreach($_POST as $key => $value){
$_SESSION[$key] = $value;
}
make_frame();
// フレームヘッダー作成
}elseif($mode == "header"){
make_header();
// フレームコンテント作成
}elseif($mode == "content"){
make_content();
}


// フレーム作成関数
function make_frame(){
print("<html>\n");
print("<frameset rows=\"50%, *\">\n");
print("<frame src=./test_session.php?mode=header />");
print("<frame src=./test_session.php?mode=content />");
print("</frameset>");
print("</html>");
}

// フレームヘッダー作成関数
function make_header(){
print("<html>");
print("<body>");
print("header<br />");
// session変数のキーと値を表示
foreach($_SESSION as $key => $value){
print($key . ":" . $value . "<br />\n");
}
print("</body>");
print("</html>");
}

// フレームコンテント作成関数
function make_content(){
print("<html>\n");
print("<body>\n");

// session変数のキーと値を表示
foreach($_SESSION as $key => $value){
print($key . ":" . $value . "<br />\n");
}

print("</body>");
print("</html>");
}
?>
dudu2
会議室デビュー日: 2003/09/20
投稿数: 15
投稿日時: 2005-03-09 14:57
自己レスです。
解決しました。

<frame src="" />でのページ呼び出し時のパラメータとして、明示的にセッション名とセッションIDを付加することで呼び出し先(この場合、自分自身を再帰呼び出し)でもセッションを維持します。
ソース2を以下の通り変更。

// フレーム作成関数
function make_frame(){
print("<html>\n");
print("<frameset rows=\"50%, *\">\n");
print("<frame src=./test_session.php?mode=header&" . session_name() . "=" . session_id() . "/>");
print("<frame src=./test_session.php?mode=content&" . session_name() . "=" . session_id() . "/>");
print("</frameset>");
print("</html>");
}
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-03-09 20:49
 まず、ここは.NET Frameworkの掲示板なので、PHPについての質問は、回答が得られないと思います。そのことは了承済だったでしょうか?

 で、解決されたと喜んでおられるところを申し訳ないですが、その方法は危険です。セッションのIDがリクエスト文字に含まれると、簡単にハイジャックされてしまいます。

 PHP用の掲示板で、再度お尋ねになることを勧めます。


# 夜しか出てこられなくてすみませんね。。。
_________________
dudu2
会議室デビュー日: 2003/09/20
投稿数: 15
投稿日時: 2005-03-10 00:31
XML&SOA会議室が適当だったんでしょうか?ちょっと分からなかったので。


[ メッセージ編集済み 編集者: dudu2 編集日時 2005-03-10 00:55 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-03-10 21:08
 「php 質問」でググッたところ、ここが良さそうです。
(っつうか、自分で探してみた?)
http://www.gac.jp/article/index.php?stats=question&category=11

_________________
1

スキルアップ/キャリアアップ(JOB@IT)