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 :

variable de session positionnée mais non transmise


Sujet :

Langage PHP

  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut variable de session positionnée mais non transmise
    Bonjour,

    j'ai un souci avec une variable de session : j'ai un formulaire de login où l'action met à true $_SESSION["auth"] si c'est correct.
    Je constate bien que la variable est bien positionnée :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
     $auth=authentification(); echo "authenticate 72 auth=".$_SESSION['auth']."<br/>";
    mais après une redirection, elle ne l'est plus
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo " session auth=".$_SESSION['auth'];exit();
    Bien sûr, y a partout des session_start();Quelle peut être la raison ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Que vaut-elle après la redirection ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    Je viens de penser à faire un var_dump comme tu me l'as déjà conseillé. var_dump($_SESSION) après redirection donne :
    array (size=6)
    'lang' => string 'fr' (length=2)
    'str' => string 'a:321:{i:1;s:12:"INTRANET P&A";i:2;s:7:"Accueil";i:3;s:14:"Administration";i:4;s:10:"Envoi mail";i:5;s:9:"Français";i:6;s:7:"English";i:340;s:14:"Nous contacter";i:7;s:35:"Impossible d'exécuter la requête.";i:8;s:37:"Aucun élément trouvé dans la base.";i:10;s:41:"Connexion Impossible sur le Serveur MySQL";i:11;s:36:"Sélection de la Base SQL Impossible";i:12;s:46:"Impossible d'effectuer la requete d'Effacement";i:13;s:40:"Impossible d'obtenir le nombre de lignes";i:14;s:36:"Aucune machine n'a été tr'... (length=11283)
    'auth' => boolean false
    'eff' => int 0
    'user' => string 'SESA27384' (length=9)
    'pass' => string 'SESA27384' (length=9)
    donc tout est bon sauf auth...

  4. #4
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    Je donne plus de code au cas où ça puisse servir :
    index.inc.php :
    Code php : 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
    <?php 
    require_once(dirname(__DIR__).'\_includes\html0-topPHP.php'); // INIT + FONCTIONS et autres config en PHP
    // -----------------------------------------------------------
    // page DEFAUT
    // -----------------------------------------------------------
     	// ICI, on peut mettre des traitements PHP,....  SPECIFIQUE A LA PAGE
    ?>
    <?php 	require_once(dirname(__DIR__).'/_includes/html1-debut.php'); // contient le DEBUT du code HTML, le contenu de <head> SANS la balise </head> ?>
     
    <?php 	// ICI, on peut mettre des scripts, CSS SPECIFIQUE A LA PAGE (donc AVANT la  balise </head>)?>
     
    <?php 	require_once(dirname(__DIR__).'/_includes/html2-milieu.php'); // contient la balise </head>et le DEBUT du <body>, A PARTIR DE la balise </head> ?>
     
    <?php 
    var_dump($_SESSION);exit();
    etc

    html0-topPHP.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php 	
    session_start(); 
    error_reporting(E_ALL ^ (E_NOTICE|E_WARNING|E_DEPRECATED));
    header('Content-type: text/html; charset=UTF-8');
    etc

    html2-milieu.php :
    Code php : 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
    </head>
    <body>
    <?php
    // test if cookie exists
    $_SESSION["auth"]=false;
    if (isset($_COOKIE['login'])) {
    		$login=explode(':',$_COOKIE['login']);
    		$selector=$login[0];
    		$hashvalidator=hash('sha256',$login[1]);
     
    // test if this exists in dbb	
    		$sql = 'select * from `auth_token`';
    		$qid = $bdd->prepare($sql);
    		$qid->execute();
    		while ($row=$qid->fetch(PDO::FETCH_ASSOC) ) {
    				$dbselector = $row['selector']; 
    				$dbhashvalidator = $row['hashvalidator']; 
    				if (($selector == $dbselector) && (hash_equals($dbhashvalidator,$hashvalidator))) {
    					$_SESSION["auth"]=true;	
    					$_SESSION['user']=$selector;	
    				//to get pwd from table users
    					$sql = 'select password from `users` where users.user='.$selector;
    					$qid = $bdd->prepare($sql);
    					$qid->execute();
    					$row=$qid->fetch(PDO::FETCH_ASSOC);									
    					$_SESSION['pass']=$row['password']; 
    				}	
    		}
    }		
    if ( ! $_SESSION["auth"]) 
    	{
    		$_SESSION['eff']=0; //this initialization is placed here because it has to be done only at the beginning
     
    		?>
     
     
    		<main>
    		  <section>
    			<form id="authform" action="<?php echo SITE_URL_HTTP;?>/page/authenticate.php" method="post">
    			<fieldset id="form-area1">
    			<p>
    			<a href="http://www.schneider-electric.com/b2b/en/campaign/life-is-on/life-is-on.jsp" target="_blank">
    			<img src="<?php echo SITE_URL_HTTP; ?>/images/logo/LifeIsOn1x30_transparent.jpg" alt=''/></a><span class="dblock"></span>
    			<?php echo $str[323]; ?>  <h2><i class="fa fa-user-o" aria-hidden="true"></i>
    		 LOGIN</h2>
    			  <p>
    				<label for="login2">Username</label>
    				<input id="login2" type="text" size="30" value="<?php echo "";?>" name="login2" />
    			  </p>
    			  <p>
    				<label for="pwd2">Password</label>
    				<input class="btsubmit" id="pwd2" type="text" size="30" value="<?php echo "";?>" name="pwd2" /></p>
    				<p>
    				<label for="goauth"><?php echo $str[351]; ?></label>
    				<input  id="goauth" type="submit" value="<?php echo "";?>" name="goauth" />
     
    			  </p>
    			  </fieldset>
    			  <fieldset id="form-area2">
    			  <p>
     
    			  <label for="remember"><?php echo $str[324]; ?></label>
    			  <input  type="checkbox" id="remember"  name="remember" />
    			  </p>
    			  </fieldset>
    			</form>
    		  </section>
     
    		  <br />
     
    		</main>
     
     
    	<?php	
    	}
     
    else { /* if $_SESSION["auth"] is true --*/
     
    	include dirname(__DIR__)."\\language.".$lang.".inc.php"; 
    	include dirname(__DIR__)."\\header.inc.php";
    	include dirname(__DIR__)."\\menupage.php";
     ?>
    <?php }	// ICI, ON MET LE CONTENU SPECIFIQUE A LA PAGE (HTML, PHP,...) ?>

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Et la redirection est ou la dedans ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // test if cookie exists
    $_SESSION["auth"]=false;
    À priori, ça n'a rien à faire dans html2-milieu.php.

    Il faudrait revoir la logique du code....

  7. #7
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Et la redirection est ou la dedans ?
    J'ai pas donné assez de code.
    action du formulaire d'authentification dans html2-milieu.php ; authenticate.php :
    Code php : 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
    <?php // en tout début de fichier (RIEN AVANT)
     	require_once(dirname(__DIR__).'\_includes\html0-topPHP.php'); // INIT + FONCTIONS et autres config en PHP
     
    require_once(dirname(__DIR__).'/_includes/html1-debut.php'); // contient le DEBUT du code HTML, le contenu de <head> SANS la balise </head>
     
    	require_once(dirname(__DIR__).'/_includes/html2-milieu.php'); // contient la balise </head>et le DEBUT du <body>, A PARTIR DE la balise </head>
     
    function authentification()
    {
    global $bdd;
     
    $auth=false;
    //to check if login and pwd are present in the table user
    $sql = 'select * from `users`';
     
    $qid = $bdd->prepare($sql);
    $qid->execute();
    while ($row=$qid->fetch(PDO::FETCH_ASSOC) ) {
    		$usr = $row['user']; 
    		$password = $row['password'];  
    		if (($usr == $_POST['login2']) && ($password == $_POST['pwd2'])) {
    			$auth = true;
     
    			$_SESSION['user']=$usr;
    			$_SESSION['pass']=$password;						
    }}
     
    if (isset($_POST['remember'])) { 
    			$_SESSION['remember']=true; 
    			require_once(dirname(__DIR__).'/page/remember.php');										
    }
    else {//to delete all cookies
    			setcookie ("login","", time() -100);
    }		
     
    if (!$auth) {
    	$_SESSION['remember']=false;
    }
     
    $_SESSION['auth']=$auth;
     
     return $auth;
    }
     $auth=authentification(); 
     header ("Location: $_SERVER[HTTP_REFERER]" );
     exit(); 
     
     require_once(dirname(__DIR__).'/_includes/html3-fin.php'); // contient la FIN du code HTML, jusqu'au </body></html>

    Citation Envoyé par jreaux62 Voir le message

    À priori, ça n'a rien à faire dans html2-milieu.php.
    exact, il suffit de l'enlever !
    Mon idée était d'initialiser la variable de session au départ, mais comme ce fichier est inclus aussi dans index.inc.php, la variable était remise à 0 après avoir été positionnée...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Mon idée était d'initialiser la variable de session au départ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( empty($_SESSION["auth"]) ){ $_SESSION["auth"]=false; }

  9. #9
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    j'essaie ce matin de commenter mon code de remember me et je ne comprends pas pourquoi isset ne suffit pas à la place de empty...

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

    dans ton code, tu avais juste mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION["auth"]=false;
    Et cherche la différence entre isset() et empty(), si tu as oublié.

  11. #11
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    OK, il ne faut pas le faire tout le temps et j'ai bien vu que empty=vide, nulle ou isset, mais je ne vois pas pourquoi il faut élargir le test...

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

Discussions similaires

  1. variable de session non transmise
    Par laurentSc dans le forum Langage
    Réponses: 11
    Dernier message: 13/12/2013, 13h44
  2. session expirée mais non null
    Par Tail dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 18/09/2008, 13h04
  3. Variables de sessions non transmises en local
    Par cerveza dans le forum Langage
    Réponses: 5
    Dernier message: 31/12/2007, 22h34
  4. [Cookies] variable de session ou cookie non transmise
    Par dubitoph dans le forum Langage
    Réponses: 1
    Dernier message: 01/12/2006, 22h37
  5. Réponses: 5
    Dernier message: 20/10/2006, 13h44

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