IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langages serveur Discussion :

Requetes HTTP et cookie de session


Sujet :

Langages serveur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de bigltnt
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut Requetes HTTP et cookie de session
    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
    ?>

  2. #2
    Membre confirmé Avatar de bigltnt
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    Aucun problème sur les headers, juste côté symfony :

    oublier le $this->getUser()->setAuthenticated(true), c'est maaaal

Discussions similaires

  1. Requetes HTTP avec session
    Par Killerguy dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 09/06/2010, 18h17
  2. Lib HTTP avec gestion des sessions et cookies
    Par Florian Goo dans le forum Bibliothèques
    Réponses: 11
    Dernier message: 29/01/2010, 22h06
  3. Requete HTTP Post et Cookies
    Par Ptitkarl dans le forum Langage
    Réponses: 17
    Dernier message: 24/04/2008, 15h31
  4. Réponses: 2
    Dernier message: 20/06/2005, 14h57
  5. [http] comment faire une requete http
    Par Slimer dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 28/07/2004, 11h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo