Php Soap Headers没有设置

时间:2014-08-01 21:11:04

标签: php web-services soap header

我无法让我的php在SOAP Header中设置一个值。

我的代码是

$requestParams = 'Parameters I am passing into the WS'

$client = new SoapClient('https://webservice.wsdl',array(
                'login' => "user",
                'password' => "password",
                'trace' => 1,
                'sessionID' => "93b23bb6e611db8548f2ee9485bc7d17"));

$client->submitRequest($requestParams);

处理返回的代码,它确实返回了我期望的内容

然后

$client->release();

应该释放此会话ID

我正在调用的Web服务使用一个sessionID变量,如果没有传递它,它将为您创建一个,但是在锁定5分钟之前,您只能创建5个唯一会话。

如果你打开一个会话,你可以重复使用它,只要你关闭会话并且不要打开五个以上。

我的问题是一切正常但Web服务没有看到我的sessionID变量,因为每次我打电话时都会向我发出一个新的sessionID。所以它创建了5个新的sessionID,我无法在完成时释放它们,我必须等到它们在服务器上超时。

  

Web服务呼叫#1字符串(414)" HTTP / 1.1 200 OK日期:星期五,01年8月1日   2014 20:56:32 GMT Server:Apache Set-Cookie:   PHPSESSID = ee6d8e3f9e6e1b9dac35e10f917a69c8; path = / Expires:周四,19岁   1981年11月08:52:00 GMT Cache-Control:无商店,无缓存,   must-revalidate,post-check = 0,pre-check = 0 Pragma:no-cache   Set-Cookie:PHPSESSID = ee6d8e3f9e6e1b9dac35e10f917a69c8;路径= /   内容长度:560连接:关闭内容类型:text / xml;   charset = utf-8"

     

Web服务呼叫#2字符串(414)" HTTP / 1.1 200 OK日期:星期五,01年8月1日   2014 20:57:18 GMT服务器:Apache Set-Cookie:   PHPSESSID = 46d99f3b92d095981119b7050686967c; path = / Expires:周四,19岁   1981年11月08:52:00 GMT Cache-Control:无商店,无缓存,   must-revalidate,post-check = 0,pre-check = 0 Pragma:no-cache   Set-Cookie:PHPSESSID = 46d99f3b92d095981119b7050686967c;路径= /   内容长度:560连接:关闭内容类型:text / xml;   charset = utf-8"

等我知道了 连接被拒绝,我必须等待。如果会话ID是从上面的代码在SOAP HEADER中传递的,那么响应将如下所示。

  

string(414)" HTTP / 1.1 200 OK日期:星期五,01八月2014 20:58:18 GMT   服务器:Apache Set-Cookie:PHPSESSID = 93b23bb6e611db8548f2ee9485bc7d17;   path = / Expires:Thu,19 Nov 1981:08:52:00 GMT Cache-Control:no-store,   no-cache,must-revalidate,post-check = 0,pre-check = 0 Pragma:no-cache   Set-Cookie:PHPSESSID = 93b23bb6e611db8548f2ee9485bc7d17;路径= /   内容长度:560连接:关闭内容类型:text / xml;   charset = utf-8"

1 个答案:

答案 0 :(得分:2)

您需要使用SoapClient类上的_cookies和__setCookie方法来获取和设置在SOAP调用期间使用的会话ID。

您的代码如下所示:

$requestParams = 'Parameters I am passing into the WS'
$sessionId = "93b23bb6e611db8548f2ee9485bc7d17";

$client = new SoapClient('https://webservice.wsdl',array(
                'login' => "user",
                'password' => "password",
                'trace' => 1));
$client->__setCookie('PHPSESSID', $sessionId);

// ... your requests

如果您在单独的无状态运行脚本中进行调用,那么您还需要设置一些持久性方法,以使会话ID在使用之间保持不变。