菜鸟问题。
我正在开发一个使用有状态 Web 服务的 PHP 网站。基本上,我的网站的“控制流”如下:
- 向用户显示一个页面。
- 用户执行一个动作。
- Web 站点的服务器使用用户输入作为参数向 Web 服务发出请求。
- Web Service 的服务器执行请求,并在此过程中从状态 A 转到状态 B。
- Web 站点的服务器将用户重定向到另一个页面,然后我们返回到第 1 步。
我的问题是网站在请求之间失去了对 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();
?>
但它不起作用。我的代码有什么问题?