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

Langage PHP Discussion :

Perte de $_SESSION lors d'une redirection


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 54
    Par défaut Perte de $_SESSION lors d'une redirection
    Bonjour,

    D'un prog de controle de formulaire j'appelle une fonction redirect

    ____________________
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     if($reg==0)    
           redirect('modregint.php');
     
          	        else                         
               redirect('devoirseleve.php');  
         exit;
     
     
     
    	}   
     
     ?>
    Source de la fonction redirect :

    _______________________
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function redirect($filename) {
        if (!headers_sent())
            header('Location: '.$filename);
        else {
            echo '<script type="text/javascript">';
            echo 'window.location.href="'.$filename.'";';
            echo '</script>';
            echo '<noscript>';
            echo '<meta http-equiv="refresh" content="0;url='.$filename.'" />';
            echo '</noscript>';
        }
    }
    La redirection s'effectue sans problème vers devoirseleve.php dont voici le début :

    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
     
    <?php   
          	session_start(); 
    header('Content-Type: text/html; charset=UTF-8');
     
    ?>
    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" style="height: 241px;">
    		<?php
        $bdd  = $_SESSION['BDD'];       
        $serveur   = $_SESSION['serveur'];
        $pass_bdd  = $_SESSION['pass_bdd'];
        $ut_bd   = $_SESSION['ut_bd'];  
         $conn = mysqli_connect($serveur, $ut_bd, $pass_bdd, $bdd);  		 
        if (mysqli_connect_errno())      
        {
        echo "La connexion au serveur MySQL n'a pas abouti : " . mysqli_connect_error();
        }

    Et lors de la redirection se perd la partie de $_SESSION créée dans le prog de controle de formulaire, (pas ce qui a été crée avant)
    Et ce sur 1&1 en version PHP > 7.0
    Cela fonctionne avec les versions PHP précédentes, ça commence à ne plus aller en PHP 7.1

    A noter que dans mon localhost créé par WAMP et en PHP 7.2.18 cela fonctionne très bien aussi

    Bref au secours je ne comprends rien

    Merci d'avance à qui peut m'aider!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        $bdd  = $_SESSION['BDD'];       
        $serveur   = $_SESSION['serveur'];
        $pass_bdd  = $_SESSION['pass_bdd'];
        $ut_bd   = $_SESSION['ut_bd'];
    C'est une TRÈS MAUVAISE pratique !!
    On ne met JAMAIS des données sensibles (mot de passe,...) dans des variable $_POST, $_GET ou $_SESSION !


    ON crée un fichier connect.php, dans lequel on met tout le code de connexion.
    Les paramètres de connexion à la BDD sont généralement définis UNE ET UNE SEULE FOIS par des CONSTANTES (et/ou dans un fichier séparé et protégé).

    Tu peux t'inspirer (et adapter la syntaxe PDO -> mysqli *) cette méthodologie : PDO une soupe et au lit !
    * Ou mieux : passer à PDO !
    Dernière modification par rawsrc ; 14/10/2019 à 00h23.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 54
    Par défaut
    Ok je modifierai ça. merci pour le conseil
    Mais ça ne répond pas du tout à ma question.
    C'est une autre partie de $_SESSION qui est concernée

  4. #4
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Et lors de la redirection se perd la partie de $_SESSION créée dans le prog de controle de formulaire,
    Bonjour, tu peux nous montrer tout ce qui concerne ce script-là, justement ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 54
    Par défaut
    Ok, comme il est assez petit, je le mets en entier.
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    <?php
     session_start();
    $msg = ' ' ;
     $id = $_POST['Id'];
     $verif_id = strtolower($id); 
    $mp = $_POST['mp']; 
     $verif_mp = strtolower($mp); 
       include 'fonctions.php';     
     
       // Si le site est fermé
       if ($_SESSION['siteferme'] == "oui") {
     
     
       if ($verif_id != "pandu" OR $mp !="papa"){
       redirect('index.php?js=1'); 
       exit ;                                   }  
                                            }
         var_dump($_SESSION) ;
     
      $bdd  = $_SESSION['BDD'];
        $serveur   = $_SESSION['serveur'];
        $pass_bdd  = $_SESSION['pass_bdd'];
        $ut_bd   = $_SESSION['ut_bd']; 
         $conn = mysqli_connect($serveur, $ut_bd, $pass_bdd, $bdd);
        if (mysqli_connect_errno())
        {
        echo "La connexion au serveur MySQL n'a pas abouti : " . mysqli_connect_error();
        }     
     
     
     
     
     
    $sql = "SELECT id_eleve,pass_eleve,Date_der_connect,id_prof,reg_inter,classe_eleve,directeur FROM  eleves WHERE  id_eleve  ='$verif_id'" ;
    $result = mysqli_query($conn,$sql)or die('Erreur SQL !<br>'.$sql.'<br>'.mysqli_error());
    $data = mysqli_fetch_assoc($result);      $n = mysqli_num_rows($result);
    		$_SESSION['id_prof']=$data['id_prof'];
        $idprof = " ";
    		$idprof= $data['id_prof'];
    		$reg= $data['reg_inter'];
    		 		 $_SESSION['directeur']=$data['directeur'];
    		$_SESSION['classe_eleve']=$data['classe_eleve'];  
    if(empty($n))
    {$msg ='Identifiant inconnu';}
    elseif ($verif_mp != $data['pass_eleve'])
    {$msg ='Mot de passe incorrect';}
     
     
        // Controles IP
          if( $msg == ' ') {
            $dotted = get_ip();
            $ip = IPAddress2IPNumber($dotted);        $_SESSION['ip']=   $ip;
             $sql = "SELECT * FROM  connect_ip WHERE  id_eleve  ='$verif_id' AND adresse_ip=$ip" ;
    $result = mysqli_query($conn,$sql)or die('Erreur SQL !<br>'.$sql.'<br>'.mysqli_error());
    $data = mysqli_fetch_assoc($result); $n = mysqli_num_rows($result); 
            if($n==0){  // Nouvelle IP
                      	$sql = "INSERT INTO connect_ip (id_eleve ,adresse_ip)
    VALUES (  '$verif_id', 	$ip)" ; 
       	$result = mysqli_query($conn,$sql)or die('Erreur SQL !<br>'.$sql.'<br>'.mysqli_error());
                                    // Regarde s'il faut éjecter le profil à partir de la nouvelle ip 
                                   // A faire
     
                      }            else { $fin=$data['Jours_exclusion'];
                                   if (time()<$fin)$msg=htmlentities('Connexion non autorisée.');
     
                                        }
     
                            }   
         // MAJ DER CONNECT   
         		$date = date("ymd");
    $sql = "SELECT * FROM  eleves WHERE  id_eleve  ='$verif_id'" ;
    $result = mysqli_query($conn,$sql)or die('Erreur SQL !<br>'.$sql.'<br>'.mysqli_error());
    $dat = mysqli_fetch_assoc($result); 
         		$sql="UPDATE eleves SET Date_der_connect = $date WHERE id_eleve ='$verif_id'";
    	$result = mysqli_query($conn,$sql)or die('Erreur SQL !<br>'.$sql.'<br>'.mysqli_error()); 
           mysqli_close();
           $_SESSION['message'] = ' ';
     
     if( $msg != ' ') {    
    	$_SESSION['message'] = $msg;  
    redirect('index.php?js=1');
    }
    	else {
           visites(1);		     
    		$_SESSION['id_eleve'] =$verif_id;
    $_SESSION['id_prof']=$idprof;
    $_SESSION['m_p']=$verif_mp;
    		if($idprof != '')
    		{  
    		$s = $idprof ;
     
    			  		}
    		else
    		{ 
     
     		$s = $verif_id ;
        }                      
        $c = $s[0];
        $c =  strtoupper($c) ;
         $s[0]=$c ;
          			$msg= 'Bonjour '.$s.' !' ;
        // Message de bienvenue
    				$_SESSION['mesage'] = $msg;
    		    // Ecriture dans le log général
            include 'datetableau.php';
            $repertoire = dirname(__FILE__)."/Devoirs/";         
        		$s2 = "log.txt";
        		if(empty($idprof))
        		$s="Le ".$data." connexion de ".$verif_id."\n";
        		else
        		$s="Le ".$data." connexion de ".$verif_id." alias ".$idprof."\n";    		
    $bavard        = $repertoire.$s2 ;
    $fp = fopen($bavard, "a+");
    fwrite($fp,$s);
    fclose($fp);                   
    		        // Redirection
     
     
          if($reg==0)    
           redirect('modregint.php');
     
          	        else                         
               redirect('devoirseleve.php');  
         exit;
     
     
     
    	}   
     
     ?>

    Merci pour votre aide

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 714
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 714
    Par défaut
    le soucis vient peut-être de la fonction "redirect".
    après l'appel à "header" vous devriez rajouter "exit();" sinon le code continue d'être exécuté et peut-être que ce code modifie les données de session.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 54
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        $bdd  = $_SESSION['BDD'];       
        $serveur   = $_SESSION['serveur'];
        $pass_bdd  = $_SESSION['pass_bdd'];
        $ut_bd   = $_SESSION['ut_bd'];
    C'est une TRÈS MAUVAISE pratique !!
    On ne met JAMAIS des données sensibles (mot de passe,...) dans des variable $_POST, $_GET ou $_SESSION !


    ON crée un fichier connect.php, dans lequel on met tout le code de connexion.
    Les paramètres de connexion à la BDD sont généralement définis UNE ET UNE SEULE FOIS par des CONSTANTES (et/ou dans un fichier séparé et protégé).

    Tu peux t'inspirer (et adapter la syntaxe PDO -> mysqli *) cette méthodologie : PDO une soupe et au lit !
    * Ou mieux : passer à PDO !
    C'est bon, j'ai changé partout mais ça ne change rien au pb de $_SESSION

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par pandu Voir le message
    C'est bon, j'ai changé partout...
    Super...

    Si tu ne montres pas ton code, ni les TESTS que tu as fais (pour chercher l'origine de ton souci), on ne peut que faire des SUPPOSITIONS.
    Dernière modification par Invité ; 25/10/2019 à 14h15.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 54
    Par défaut
    Là tout le code a été donné. Les tests sont des var_dump de $_SESSIOn
    avant redirect(..) tout est là, après (la ligne après) une partie disparaît au changement de page, mais seulement en PHP 7.1 chez 1&1.
    Eux disent que c mon code mais je commence à avoir des doutes ..

  10. #10
    Invité
    Invité(e)
    Par défaut
    Le code que tu montres ne suffit pas.
    Et vu que tu ne montres pas celui après corrections...
    Pas mieux.

Discussions similaires

  1. Erreur lors d'une redirection
    Par cels dans le forum Langage
    Réponses: 3
    Dernier message: 30/10/2006, 14h39
  2. Message Erreur lors d'une redirection
    Par TOPGUN89 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 28/08/2006, 16h00
  3. Affichage d'une page dans un <DIV> lors d'une redirection
    Par zoidy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 12/06/2006, 17h57
  4. [Sécurité] problème lors d'une redirection
    Par sam01 dans le forum Langage
    Réponses: 4
    Dernier message: 11/04/2006, 00h01
  5. [MySQL] Perte d'information lors d'une requête de visualisation
    Par niccco dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 21/10/2005, 14h46

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