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

AJAX Discussion :

[AJAX] XMLHttpRequest et perte de session


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Par défaut [AJAX] XMLHttpRequest et perte de session
    Bonjour,

    j'ai un probleme avec XMLHttpRequest et les sessions.
    Lors de l'appel à la page php par le XMLHttpRequest ma session est perdu car je ne peux pas faire de session_start(), car le header est déjà envoyé.
    J'ai un warning.

    j'ai une premiere page php : onload.php


    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
    <?php
     
    session_start()
     
    /*ouverture de session pour forum phpBB*/
        //il est IMPERATIF qu'aucun texte n'ait été affiché avant cette ligne, sinon, vous aurez droit à l'erreur
        //Cannot modify header information - headers already sent by (output started at C:/wamp/www/singles/test.php:5)
        $user->session_begin();
     
     
    $_SESSION['login'']= $login;
     
    echo"<script type=\"text/javascript\">
    <!--
    window.onload =  function() {  
     
    loadScript();
    };
     
    -->
    </script>";
     
    ?>


    dans ma js fonction.js j'ai XMLHttpRequest

    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
     
     function loadScript(){
    var xhr_url=server.php
     var xhr_object = null; // declarationde la variable
     	if(window.XMLHttpRequest){ // Firefox
    	 xhr_object = new XMLHttpRequest(); // declaration de lobjet
    	 }else if(window.ActiveXObject){ // Internet Explorer
    	 xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); // declaration de lobjet
    	 }else { // XMLHttpRequest non supporté par le navigateur
    	 alert("Your browser does'nt use XMLHTTPRequest objects...");
    	 return;
    	 }
    	  xhr_object.open("POST", xhr_url, true); 
     
    		   xhr_object.onreadystatechange = function() { 
    		      if(xhr_object.readyState == 4){ 
     
    			 		eval(xhr_object.responseText);
     
     
     
    			} 
    		   } 
     
    		   xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    		   var data = "family="+escape(l1.options[index].value)+"&form="+f.name+"&select=list2"; 
     
    		   xhr_object.send(data); 
    }
    la page server.php


    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
     
    session_start();
     
    echo $_SESSION['login''];
    session_write_close(); //-- close session
    ?>


    J'ai un message d'erreur :

    Warning: Cannot modify header information - headers already sent by

    Car j'ai déjà ouvert une session dans ma page d'origine appelante : onload.php.
    Du coup je ne peux pas récupérer les variables de session dans la page php appelée server.php.
    Le probleme vient de ce que je ne peux pas mettre de session_start() ou de header() dans ma page php. Car la page d'origine appelante a déjà un header(). Celui du forum phpBB

    Comment faire pour avoir les variables de session dans le fichier php appel ?

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Bonjour,
    J'ai un message d'erreur :

    Warning: Cannot modify header information - headers already sent by
    étrange je lis ceci en commentaire dans le 1st code que tu as fourni.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /*ouverture de session pour forum phpBB*/
        //il est IMPERATIF qu'aucun texte n'ait été affiché avant cette ligne, sinon, vous aurez droit à l'erreur
        //Cannot modify header information - headers already sent by (output started at C:/wamp/www/singles/test.php:5)
        $user->session_begin()

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Par défaut
    Dans le premier fichier php onload.php

    j'ouvre une session pour le forum phpBB.

    Je ne dois rien afficher avant l'ouverture de session du forum.

    La page onload seule sans le javascript XMLHTTPRequest qui appelle le fichier server.php, fonctionne. Pas de message d'erreur.

    Quand j'utilise le javascript XMLHTTPRequest qui appelle le fichier server.php et dans le fichier appelé server.php je ne mets pas session_start() ou de header() au début, ça marche, pas d'erreur.

    Mais lorsque je mets dans server.php : session_start() ou un header j'ai le message d'erreur :

    Warning: Cannot modify header information - headers already sent by

    du coup je ne peux pas utiliser les variables de session dans server.php.
    Ce qui fait que je dois bricoler et ajouter des variables qui ne sont plus alors des variables de session et qui prennent les valeurs des variables de session.
    Ces nouvelles variables sont transmises dans le javascript par send(data);
    Ma page appelée server.php n'a pas de variable de session.

  4. #4
    Membre confirmé
    Homme Profil pro
    Chef opération transport urbain
    Inscrit en
    Avril 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Chef opération transport urbain
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2008
    Messages : 92
    Par défaut
    As-tu essayé d'ouvrir la page server.php par le biais d'un navigateur sans passer par AJAX et de passer tes paramètres en GET ?

    La meilleure façon de trouver ce genre de problème, c'est d'utiliser un programme d'édition PHP avec serveur intégré pour faire du débogage étape par étape (j'utilise NuSphere PhpED 5.9).

    Après avoir eu ce genre de problème plusieurs fois, j'ai commencé à utiliser une variable $output pour stocker tout ce qui doit être affiché à l'écran et à la fin de mes scripts, je fais echo $output;

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Par défaut
    J'ai rajouté un bouton submit et des input hidden avec les valeurs des variables de session.

    J'envoie vers la page server.php

    Les paramètres du GET sont bien récupérées et je peux les afficher.
    Il n'y a pas de message d'erreur si je ne mets pas de session_start(); dans server.php

    si je mets il y a l'erreur :


    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent

    onload.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    echo"	<form   action=\"server.php\" method=\"GET\" >";
     
     
    echo" <input type=\"hidden\" name=\"id_user2\" id=\"id_user2\" value=\"".$_SESSION['login']."\">";
    echo" <input type=\"hidden\" name=\"name_user2\" id=\"name_user2\" value=\"".$_SESSION['id']."\">";
     
    echo"   <input type=\"submit\" name=\"read_input\" value=\"read_input\" >";
    echo"	</form>
    server.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    /*session_start();*/
     
    echo"_GET['id_user2'] = ".$_GET['id_user2']."<br>"; 
    echo"_GET['name_user2'] = ".$_GET['name_user2']."<br>"; 
     
    /*session_write_close(); //-- close session*/

  6. #6
    Membre confirmé
    Homme Profil pro
    Chef opération transport urbain
    Inscrit en
    Avril 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Chef opération transport urbain
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2008
    Messages : 92
    Par défaut
    J'ai eu du mal à cerner ton problème. Mon serveur local étant légèrement différent de mon serveur externe.

    Premièrement, j'ai fait plusieurs tests et aucun ne me donnait l'erreur que tu avais, malgré le fait que j'affichais quelque chose avec un echo avant de fait mon session_start();

    C'est parce que ma config PHP avait un 4Mo de output_buffering et emmagasinait les echo avant de l'afficher ! En mettant cette variable à 0, j'ai tout de suite eu le même avertissement.

    J'ai réussi à avoir cet avertissement en plaçant mon session_start avant de faire quoi que ce soit mais en laissant une ligne blanche avant mon <?php

    Ce code m'affiche un message d'erreur
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
     
    error_reporting(-1);
     
    session_start();
     
    echo"_GET['id_user2'] = ".$_GET['id_user2']."<br>"; 
    echo"_GET['name_user2'] = ".$_GET['name_user2']."<br>"; 
     
    session_write_close(); //-- close session
     
    ?>

    Ce code ne m'en affiche pas
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
     
    error_reporting(-1);
     
    session_start();
     
    echo"_GET['id_user2'] = ".$_GET['id_user2']."<br>"; 
    echo"_GET['name_user2'] = ".$_GET['name_user2']."<br>"; 
     
    session_write_close(); //-- close session
     
    ?>

    Vérifie bien que ton fichier PHP commence réellement par <?php et non pas par une ligne blanche. C'est la seule raison que je peux voir. À moins que tu nous aies pas donné toutes les lignes de code de ton fichier server.php

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.3] Perte de session PHP lors de requete Ajax
    Par touness dans le forum Langage
    Réponses: 3
    Dernier message: 21/03/2012, 14h06
  2. [AJAX] appel AJAX lors d'une perte de session
    Par CocoLeNain dans le forum AJAX
    Réponses: 0
    Dernier message: 31/05/2010, 21h35
  3. [PHP 5.2] Perte de session lors de requête AJAX
    Par arkhesis dans le forum Langage
    Réponses: 6
    Dernier message: 31/08/2009, 20h23
  4. [JSP/AJAX] Perte de session et de response dans ma JSP
    Par maxbzh56 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 22/08/2006, 17h34

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