Noobの質問。
ステートフルWebサービスを使用するPHPWebサイトを開発しています。基本的に、私のWebサイトの「制御の流れ」は次のとおりです。
- ユーザーにページが表示されます。
- ユーザーがアクションを実行します。
- Webサイトのサーバーは、ユーザー入力をパラメーターとして使用して、Webサービスへの要求を実行します。
- Webサービスのサーバーは要求を実行し、プロセスで状態Aから状態Bに移行します。
- Webサイトのサーバーはユーザーを別のページにリダイレクトし、ステップ1に戻ります。
私の問題は、Webサイトがリクエスト間でWebサービスの状態を追跡できなくなることです。WebサイトにWebサービスの状態を追跡させるにはどうすればよいですか?PHPの標準SoapClient
クラスを使用しています。
SoapClient
オブジェクトをセッション変数にシリアル化してみました:
# ws_client.php
<?php
function get_client()
{
if (!isset($_SESSION['client']))
$_SESSION['client'] = new SoapClient('http://mydomain/MyWS/MyWS.asmx?WSDL', 'r');
return $_SESSION['client'];
}
function some_request($input1, $input2)
{
$client = get_client();
$params = new stdClass();
$params['input1'] = $input1;
$params['input2'] = $input2;
return $client->SomeRequest($params)->SomeRequestResult;
}
function stateful_request($input)
{
$client = get_client();
$params = new stdClass();
$params['input'] = $input;
return $client->StatefulRequest($params)->StatefulRequestResult;
}
?>
# page1.php
<?php
session_start();
$_SESSION['A'] = some_request($_POST['input1'], $_POST['input2']);
session_write_close();
header('Location: page2.php');
?>
# page2.php
<?php
session_start();
echo $_SESSION['A']; // works correctly
echo stateful_request($_SESSION['A']); // fails
session_write_close();
?>
しかし、それは機能しません。私のコードの何が問題になっていますか?