Bonjour à tous.

J'essaye de mettre en place un service SOAP avec une méthode d'authentification.

Je souhaiterais que le client s'authentifie à l'aide d'une fonction, puis ensuite qu'il puisse utiliser les autres fonctions (s'il y est autorisé).

Mon problème est que SOAP ne semble pas garder de données persistantes entre deux appels de fonctions.

Coté serveur, j'ai ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
<?php
 
$server = new SoapServer("monwsdl.wsdl");
$server->setClass("MaClass");
$server->setPersistence(SOAP_PERSISTENCE_REQUEST);
$server->handle();
 
?>
et du coté client, ça donne ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$client = new SoapClient("monwsdl.wsdl");
try {
    if ( $client->auth('login','password') ) {
        $data = $client->getWhatIWant();
    }
} catch(SoapFault $e) {
    $msg = (!$e->getMessage()) ? $e->faultstring : $e->getMessage();
    print "Sorry, an error was returned: $msg<HR>";
}
 
?>
Dans ma classe, j'ai une propriété $isAuth à false par defaut qui passe à true dans la fonction auth(). Problème, elle passe bien à true mais lors de l'appel de la deuxième fonction, elle est repassé à false.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    /**
     * Authentification
     *
     * @param string $username
     * @param string $password
     * @return mixed SOAP Fault on error, true on success
     */
    function auth($username,$password) {
        if ( empty($username) || empty($password) ) throw new SoapFault("-4", "Please provide your username and password !");
        $result = mysql_query("SELECT * FROM api WHERE username = '".mysql_real_escape_string($username)."' AND password = '".md5($password)."' LIMIT 1",$this->db);
        if ($result && $api_user = mysql_fetch_assoc($result)) {
            $this->isAuth = true;
            $this->username = $username;
            $this->password = $password;
            return true;
        } else {
            throw new SoapFault("-5", "Authentification failed");
        }
    }
J'ai également essayé avec SOAP_PERSISTENCE_SESSION mais rien n'y fait, à chaque appel de fonction, il reconstruit une instance de l'objet.

Quelqu'un a-t-il déjà eu ce problème ?
Ma google search ne me retourne pas grand chose si ce n'est des pages de manuel

Merci pour vos lumières.