PHP 肥皂标题未设置

Posted

技术标签:

【中文标题】PHP 肥皂标题未设置【英文标题】:Php Soap Headers Not Getting Set 【发布时间】:2014-09-25 03:51:19 【问题描述】:

我无法让我的 php 在 SOAP 标头中设置值。

我的代码是

$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();

应该释放这个 sessionID

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

如果您打开一个会话,只要您释放一个会话并且打开的会话不超过五个,您就可以重复使用它。

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

Web 服务调用 #1 字符串(414)“HTTP/1.1 200 OK 日期:周五,8 月 1 日 2014 20:56:32 GMT 服务器:Apache Set-Cookie: PHPSESSID=ee6d8e3f9e6e1b9dac35e10f917a69c8; path=/ 过期:星期四,19 1981 年 11 月 08:52:00 GMT 缓存控制:无存储,无缓存, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache 设置 Cookie:PHPSESSID=ee6d8e3f9e6e1b9dac35e10f917a69c8;路径=/ 内容长度:560 连接:关闭 内容类型:文本/xml; 字符集=utf-8"

Web 服务调用 #2 字符串(414)“HTTP/1.1 200 OK 日期:周五,8 月 1 日 2014 20:57:18 GMT 服务器:Apache Set-Cookie: PHPSESSID=46d99f3b92d095981119b7050686967c; path=/ 过期:星期四,19 1981 年 11 月 08:52:00 GMT 缓存控制:无存储,无缓存, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache 设置 Cookie:PHPSESSID=46d99f3b92d095981119b7050686967c;路径=/ 内容长度:560 连接:关闭 内容类型:文本/xml; 字符集=utf-8 "

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

string(414) "HTTP/1.1 200 OK 日期:2014 年 8 月 1 日星期五 20:58:18 GMT 服务器:Apache Set-Cookie:PHPSESSID=93b23bb6e611db8548f2ee9485bc7d17; path=/ 过期时间:星期四,1981 年 11 月 19 日 08:52:00 GMT 缓存控制:无存储, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache 设置 Cookie:PHPSESSID=93b23bb6e611db8548f2ee9485bc7d17;路径=/ 内容长度:560 连接:关闭 内容类型:文本/xml; 字符集=utf-8 "

【问题讨论】:

【参考方案1】:

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

您的代码如下所示:

$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 在使用之间保持不变。

【讨论】:

以上是关于PHP 肥皂标题未设置的主要内容,如果未能解决你的问题,请参考以下文章

带有 PHP 的 Jira 肥皂

代理上的 PHP 肥皂

Weblogic 12c - 肥皂网络服务不工作

PHP 使用肥皂从sugarCRM恢复关系

PHP 肥皂故障

PHP肥皂Gerrit