我已经用PHP创建了一个非wsdl soap服务器,以运行我拥有的所有服务器中的功能。从我的个人资料可以看出,这方面存在很多问题,但我希望可以解决。我无法在服务器和客户端之间传输SESSION数据。
已经使用
.menu
并手动设置session_id
$server->setPersistence(SOAP_PERSISTENCE_SESSION);
但没有运气将SESSION数据传输到客户端。
是否可以将在soap-server.php上创建的SESSION数据传输到soap-client.php?
答案 0 :(得分:0)
给这个肥皂服务器
class MyClass
{
public function __construct(){
session_start();
}
public function login( $user )
{
$_SESSION['user'] = $user;
return true;
}
public function getUserName()
{
return isset( $_SESSION['user'] ) ? $_SESSION['user'] : false;
}
}
$server = new SoapServer( null, array( 'uri' => 'http://localhost/scratch/soap.server.php' ) );
$server->setClass('MyClass');
$server->handle();
还有这个肥皂客户
$url = 'http://localhost/scratch/soap.server.php';
$config = array( 'location' => $url, 'uri' => $url );
// Call the "login" function to set the user name
$firstClient = new SoapClient(null, $config);
$firstClient->login( array( 'MyUserName' ) ); // ONLY CALL LOGIN ONCE
var_dump( $firstClient->getUserName() ); // TRUE
// Track the cookies
$cookies = $firstClient->__getCookies();
// Second Client fails because we didn't set cookies
$secondClient = new SoapClient(null, $config);
var_dump( $secondClient->getUserName() ); // FALSE
// Works because we've set cookies from the first request
$thirdClient = new SoapClient(null, $config );
$thirdClient->__setCookie( 'PHPSESSID', $cookies['PHPSESSID'][0] );
var_dump( $thirdClient->getUserName() ); // TRUE
getUserName()
可以正常工作,因为我们使用的是相同的连接上下文,并且内部重新使用了初始Cookie 。getUserName()
能够在没有login()
功能的情况下恢复。理想情况下,出于此测试的目的,您将以编程方式自动执行cookie的注入,而不是我的“硬编码”
因此,从这里开始,您必须自己管理肥皂客户端的cookie。
如果您需要会话数据本身,没有什么可以阻止您创建导出功能...例如,在此示例中为getSessionData
class MyServerClass
{
public function __construct(){
session_start();
}
public function login( $user )
{
$_SESSION['user'] = $user;
$_SESSION['SomeObject'] = new stdClass();
$_SESSION['SomeObject']->foo = 'bar';
return true;
}
public function getSessionData()
{
return $_SESSION;
}
}