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 肥皂标题未设置的主要内容,如果未能解决你的问题,请参考以下文章