Herzlich willkommen im Archiv vom ABAKUS Online Marketing Forum
Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.
https://www.ecma-international.org/publ ... MA-366.pdf6.3 SOAP Binding of sessionID
Code: Alles auswählen
<SessionHeader>
<sessionId>8789364113604871127</sessionId>
</SessionHeader>
Dachte ich bis gestern auch noch. Speichere zum Beispiel die XML von Amazon stundenweise zwischen, da ja eine "normale" XML alle Antworten bzw. alle Daten enthält. Nach einigen Fehlschlägen läuft es nun endlich unter Localhost. Für die Ausgabe:nerd hat geschrieben:Laut Wikipedia ist WSDL Ja auch nur ein XML format.
Code: Alles auswählen
<?php
$client = new SoapClient("http://localhost/soap/meine.wsdl");
$params = "Du da mit dem Namen ...";
$response = $client->ETWAS($params);
echo $response;
?>
Code: Alles auswählen
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="ETWAS">
...
<soap:address location="http://localhost/soap/mein-server.php" />
Code: Alles auswählen
<?php
$server = new SoapServer("meine.wsdl");
function ETWAS($ein_name){
return "Hallo, ".$ein_name;
}
$server->AddFunction("ETWAS");
$server->handle();
?>
Code: Alles auswählen
<?php
$option = array("trace" => 1);
$client = new SoapClient("http://localhost/soap/meine.wsdl", $option);
$params = "Du da mit dem Namen ...";
$response = $client->ETWAS($params);
echo $response."<br>";
$speichern = $client->__getLastResponse(); // letzte Antwort
file_put_contents("temp/test.xml", $speichern);
?>
Code: Alles auswählen
<SOAP-ENV:Envelope>...
<SOAP-ENV:Body>...
https://php.net/manual/de/soapserver.setpersistence.phpEs funktioniert nur, wenn der Server die Funktionen von einer gesetzten Klasse exportiert
Code: Alles auswählen
var_dump($client->__getFunctions());
var_dump($client->__getTypes());
Code: Alles auswählen
<?php
class TEEC {
function ETWAS($ein_name){
return "Hallo, ".$ein_name." Hokuspokus";
}
}
$server = new SoapServer("meine.wsdl");
$server->setClass("TEEC");
$server->setPersistence(SOAP_PERSISTENCE_SESSION);
$server->handle();
?>
Code: Alles auswählen
<?php
$option = array("trace" => 1);
$client = new SoapClient("http://localhost/soap/meine.wsdl", $option);
$params = "Du da mit dem Namen ...";
$response = $client->ETWAS($params);
echo $response."<br>\n";
echo "<pre>".$client->__getLastResponseHeaders()."</pre>\n";
$speichern = $client->__getLastResponse(); // letzte Antwort
file_put_contents("temp/test.xml", $speichern);
/* Ausgabe:
Hallo, Du da mit dem Namen ... Hokuspokus
HTTP/1.1 200 OK
Date: Wed, 14 Nov 2012 15:32:24 GMT
Server: Apache/2.2.21 ......
X-Powered-By: PHP/5.3.8
Set-Cookie: PHPSESSID=7onrmp7bhv1h43khr4drintec7; path=/
.......
*/
?>
Ja, neee....nerd hat geschrieben:...
Die session_id wirst du wahrscheinlich an die request_ul anhaengen muessen; ...
Code: Alles auswählen
if (isset($_COOKIE["PHPSESSID"])) {
echo "<br>Ja, die Session-ID ist ".$_COOKIE["PHPSESSID"]."\n";
} else {echo "Nein\n";}
Code: Alles auswählen
<?php
session_id("123abc124");
session_start();
/*
Der restliche Code ...
*/
if (isset($_COOKIE["PHPSESSID"])) {
echo "<br>Ja, die Session-ID ist ".$_COOKIE["PHPSESSID"]."\n";
} else {echo "Nein\n";}
?>
Code: Alles auswählen
Leider musst du selber dafür sorgen, dass alle persistenten Werte in $_SESSION[] abgelegt werden, deine Objekte sind nicht automatisch persistent verfügbar.
Code: Alles auswählen
$resh = $client->__getLastResponseHeaders();
if (!empty($resh)) {
preg_match("#PHPSESSID=([a-zA-Z0-9,-]+)#", $resh, $Sessifund);
session_id($Sessifund[1]);
session_start();
}
Code: Alles auswählen
session_id($Sessifund[1]);
Code: Alles auswählen
$client->__setCookie(Session-Id, $Sessifund[1]);
Code: Alles auswählen
// Die ersten Zeilen sind erst einmal richtig:
$resh = $client->__getLastResponseHeaders();
if (!empty($resh)) {
$Sessifund = $client->_cookies["PHPSESSID"][0];
// Doch ab hier, so steht es geschrieben, ohne eine nachvollziehbare Wirkung:
$client->__setCookie("PHPSESSID", $Sessifund);
/*
Doch nur so wird bei mir die PHPSESSID übernommen, wobei aber
der Bezeichner der in der Session gespeicherten Klasse verloren geht:
*/
session_id($Sessifund);
session_start();
}
https://bugs.php.net/bug.php?id=34746SOAP_PERSISTENCE_SESSION no longer works