Bonjour,

Voici la communication échangée entre mon client et mon serveur. L'objectif étant de s'authentifier, puis d'envoyer à un service l'adresse email de mon utilisateur à créer.

Le serveur est sous symfony, et côté client, je forge moi-même mes requêtes. Voir la partie du script php qui construit les requêtes au bas de ce message.

Mon problème est que je perds la session ... où en tout cas mon serveur ne la retrouve pas. Est-ce qu'il y a un problème dans mes entêtes (surtout celles concernant le cookie ) ?

======================================================================
====== Echange des requêtes brutes HTTP entre client et serveur ======
======================================================================

Etape 1: Login
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
20
- Site-client envoi:
	POST /api_dev.php/login HTTP/1.1
	Host: server.localhost
	Referer: http://client.localhost/frontend_dev.php/souscrire
	Content-type: application/x-www-form-urlencoded
	Content-length: 34
	Connection: close

	username=formation&password=blabla
	
- Serveur répond :
	HTTP/1.1 202 Accepted
	Date: Mon, 20 Dec 2010 16:04:37 GMT
	Server: Apache/2.2.11 (Win32) PHP/5.2.6
	X-Powered-By: PHP/5.2.6
	Set-Cookie: symfony=fmn9br8i4rkfkrdnjlhea6p4k7; path=/
	Content-Length: 0
	Connection: close
	Content-Type: text/html; charset=utf-8
Commentaire : Ici l'authentification se passe bien, je récupère même le cookie qui correspond a l'enregistrement du username en session côté serveur

Etape 2: Demande d'un fichier
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
20
21
22
23
24
25
- Site-client envoi:
	GET /api_dev.php/formation/diffusion-list.xml HTTP/1.1
	Host: server.localhost
	Referer: http://client.localhost/frontend_dev.php/souscrire
	Cookie: symfony=fmn9br8i4rkfkrdnjlhea6p4k7
	Content-length: 0
	Connection: close

- Serveur répond :
	HTTP/1.1 200 OK
	Date: Mon, 20 Dec 2010 16:04:37 GMT
	Server: Apache/2.2.11 (Win32) PHP/5.2.6
	X-Powered-By: PHP/5.2.6
	Content-Length: 155
	Connection: close
	Content-Type: text/xml; charset=utf-8
	
	<?xml version="1.0" encoding="utf-8"?>
	<diffusionLists>
		<diffusionList>
			<id>2</id>
			<name>news_hebdo</name>
		</diffusionList>
	</diffusionLists>
Commentaire : Ici je récupère une fichier xml, mais il ne requiert pas d'authentification, donc aucun problème

Etape 3: Demande d'inscription d'un utilisateur (en utilisant optionnellement le résultat du XML précédemment fourni, mais ca n'est pas important)
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
20
- Site-client envoi:
	POST /api_dev.php/contact/subscribe HTTP/1.1
	Host: server.localhost
	Referer: http://client.localhost/frontend_dev.php/souscrire
	Cookie: symfony=fmn9br8i4rkfkrdnjlhea6p4k7
	Content-type: application/x-www-form-urlencoded
	Content-length: 25
	Connection: close

	contact%5Bemail%5D=bigltnt@monemail.com

- Serveur répond :
	HTTP/1.1 401 Unauthorized
	Date: Mon, 20 Dec 2010 16:04:51 GMT
	Server: Apache/2.2.11 (Win32) PHP/5.2.6
	X-Powered-By: PHP/5.2.6
	Content-Length: 0
	Connection: close
	Content-Type: text/html; charset=utf-8
Commentaire : Les problèmes commencent ici; je renvois du côté de mon serveur une erreur 401 pour dire que la ressources nécessite une authentification, et que le client n'est pas connecté (malgré l'étape 1 snif ). D'ailleurs, en regardant $_SESSION il n'y a effectivement rien ...

Etape 4: Afin de gérer la perte de session dûe a une expiration, je refais l'etape de login automatiquement, remix de l'étape 1 donc ...
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
20
- Site-client envoi:
	POST /api_dev.php/login HTTP/1.1
	Host: server.localhost
	Referer: http://client.localhost/frontend_dev.php/souscrire
	Cookie: symfony=fmn9br8i4rkfkrdnjlhea6p4k7
	Content-type: application/x-www-form-urlencoded
	Content-length: 34
	Connection: close

	username=formation&password=blabla

- Serveur répond :
	HTTP/1.1 202 Accepted
	Date: Mon, 20 Dec 2010 16:04:51 GMT
	Server: Apache/2.2.11 (Win32) PHP/5.2.6
	X-Powered-By: PHP/5.2.6
	Content-Length: 0
	Connection: close
	Content-Type: text/html; charset=utf-8
Commentaire : Et ce ***** de serveur me dit que tout vas bien, d'ailleurs si je regarde $_SESSION il enregistre effectivement ma variable username
Question : Est-ce normal que je ne recoive pas de directive "Set-Cookie:" ?

Etape 5 : Une fois reconnecté, je retente la requête d'inscription de mon utilisateur
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
20
- Site-client envoi:
	POST /api_dev.php/contact/subscribe HTTP/1.1
	Host: server.localhost
	Referer: http://client.localhost/frontend_dev.php/souscrire
	Cookie: symfony=fmn9br8i4rkfkrdnjlhea6p4k7
	Content-type: application/x-www-form-urlencoded
	Content-length: 25
	Connection: close

	contact%5Bemail%5D=bigltnt@monemail.com

- Serveur répond :
	HTTP/1.1 401 Unauthorized
	Date: Mon, 20 Dec 2010 16:04:51 GMT
	Server: Apache/2.2.11 (Win32) PHP/5.2.6
	X-Powered-By: PHP/5.2.6
	Content-Length: 0
	Connection: close
	Content-Type: text/html; charset=utf-8
Commentaire : Ben oui ... ça ne marchait pas la première fois il n'y a pas de mystère .... ca marche toujours pas !

======================================================================
========== Partie du script qui construit mes requêtes HTTP ==========
======================================================================
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
		//	[...]	Des trucs avant
		
		$fp = fsockopen($host, 80);
	    
	    $request = '';
	    
	    // send the request headers:
	    $request .= ( $request_type == self::REQUEST_POST ? 'POST' : 'GET' ) . " $path HTTP/1.1\r\n";
	    $request .= "Host: " . $host . "\r\n";
	    $request .= "Referer: " . $this->_referer . "\r\n";
	    
	    //	Gestion du cookie	
	    if ( $cookie = $this->_getCookie() )
	    {
	    	//exit( $cookie );
	    	$request .= "Cookie: " . $cookie . "\r\n";
	    }
	    
	    //	Content type si POST request
	    if ( $request_type == self::REQUEST_POST )
	    	$request .= "Content-type: application/x-www-form-urlencoded\r\n";
	    	
	    $request .= "Content-length: ". strlen($data) ."\r\n";
	    $request .= "Connection: close\r\n\r\n";
	    $request .= $data;
	 	fputs($fp, $request);
	    
	    $result = ''; 
	    while(!feof($fp)) {
	        // receive the results of the request
	        $result .= fgets($fp, 128);
	    }
	 	
	    // close the socket connection:
	    fclose($fp);
		
		//	[...]	Des trucs après
?>