Web service PHP avec sessions
Il est parfois nécessaire lors de l’appel d’un web service de mémoriser des données envoyées lors d’un précédent appel. Le web service sera “statefull”.
Il faut signaler que le fait de gérer les sessions dans un web service porte préjudice aux performances. En effet si le serveur qui propose le service web doit gérer les sessions cela limitera forcément la montée en charge.
A noter que la méthode “setPersistence” de Soap permet de conserver les infos entre 2 appels mais uniquement si ces 2 appels ont lieu dans le même script.
Pour conserver l’état entre 2 appels à un web service, il faut d’abord mettre en place une gestion des session coté client.
On transmet ensuite l’identifiant de session au serveur : $obj_soapclient->__setCookie(’session_id’, session_id()).
Dans le script qui gère le serveur, on récupère l’identifiant de session fourni par le client et on démarre une session avec cet identifiant.
Les valeurs des variables membres de la classe à laquelle on accède par l’intermédiaire du web service seront conservée entre 2 appels.
Pour rappel sur la création d’un service web.
Le code coté serveur :
// instanciez le service web de manière classique
$server = new SoapServer($wsdl, $soap_options);
/* récupère les information d'identification de la session fournies par le client */
if (isset($_COOKIE['session_id'])) {
session_name('nom_session');
session_id('serv'.$_COOKIE['session_id']);
// démarre une session avec les infos fournies par le client
session_start();
}
$server->setClass('...'); // ici le nom de la classe que vous exposez
$server->setPersistence(SOAP_PERSISTENCE_SESSION);
$server->handle();
Le code coté client
// démarre une session session_start() // instanciez un client Soap de manière classique $wsdl = 'http://...'; $obj_soapclient = new SoapClient($wsdl, $soap_options); // envoyez au client l'identifiant de session $obj_soapclient->__setCookie('session_id', session_id()); // utiliser le web service ... </pre>