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 :

Pourquoi je perds mes variables sessions


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Cobol sur Mainframe et Unix AIX
    Inscrit en
    Mars 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cobol sur Mainframe et Unix AIX

    Informations forums :
    Inscription : Mars 2012
    Messages : 196
    Points : 69
    Points
    69
    Par défaut Pourquoi je perds mes variables sessions
    Bonjour,

    J'ai une page login.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
    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
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    <center>
    <H1> Connexion </H1>
    </center>
    <?php
    	$idLicencie = "";
    	$login = "";
    	$nom = "";
    	$prenom = "";
    	$Inscription_OK = false;
    	$personne = null;
    
    	if(isset($_POST['submit']))
    	{	
    		require_once 'classes/class_licencies.php';
    
    		$login = (isset($_POST['login'])) ? htmlentities(trim($_POST['login'])) : '';
    		$password = (isset($_POST['password'])) ? htmlentities(trim($_POST['password'])) : '';
    
    		if($login != '' and $password != '')
    		{
    			/* Démarre la session */
    			session_start();
    			
    			// Vérification que l'utilisateur soit connu 
    			$unLicencie = new licencies($GLOBALS['bdd']);
    			$personne = $unLicencie -> verifPassword($login, md5($password));
    			
    			if(isset($personne['idLicencie'])) {
    				// Est-ce que l'adresse mail a été validée
    				if(!$personne['Mail_Confirme'])	{
    					echo '<h1 id="msgerreur">Tu n\'as pas confirmé ton adresse mail.</h1><br/>';
    					echo '<h2 id="msginf2"><a href="">Clique ici pour recevoir à nouveau un mail</a></h2>';
    					exit;
    				}
    				else {
    					// Est-ce que le compte est bloqué
    					if (!$personne['Boo_Valide']) {
    						echo '<h1 id="msgerreur">Ton compte est bloqué</h1><br/>';
    						echo '<h2 id="msginf2">Il doit être validé par un administrateur</h2>';
    						//exit;
    					}
    					else {
    						/* Configure le limiteur de cache à 'private' */
    						//session_cache_limiter('private');
    						//$cache_limiter = session_cache_limiter();
    							
    						/* Configure le délai d'expiration en minutes */
    						//session_cache_expire(10);
    						//$cache_expire = session_cache_expire();
    							
    						$_SESSION['idLicencie'] = $personne['idLicencie'];
    						$_SESSION['login'] = $personne['Login'];
    						$_SESSION['nom'] = $personne['Nom'];
    						$_SESSION['prenom'] = $personne['Prenom'];
    						
    						/*
    						 * Vérification qu'une demande de nouveau mot de passe n'ait pas été faite
    						 */
    						if (!isset($personne['Reinit_mdp'])){
    							$_SESSION['mail'] = $personne['Email'];
    							$_SESSION['Profil_User'] = "admin";
    							echo '<p>' . $_SESSION['prenom'] . '('.$_SESSION['login'].')'. 
    									'. Tu es correctement identifié(e), 
    									';//<a href="index.php?page=accueil_login">Redirection</a></p>'."\n";
    							echo "Tu vas être redirigé(e) automatiquement sur la page d'accueil";
    							//echo "<br>login.php - Session variables ";print_r($_SESSION);exit;
    							echo "<script type='text/javascript'>document.location.replace('index.php?page=accueil_login');</script>";
    						}
    						else {
    							echo '<center><div>' . $_SESSION['prenom'] . '. Une demande de nouveau mot de passe a été faite.	';
    							require_once 'fonctions/fonctions_generales.php';
    							Fermer_Session();
    							echo "Tu dois maintenant <a href='index.php?page=reinit_password'>réinitailiser</a> ton mot de passe</div><center><br>";
    							echo "<script>alert('Une demande de nouveau mot de passe a été faite. Tu dois maintenant réinitailiser ton mot de passe.');</script>";
    							echo "<script type='text/javascript'>document.location.replace('index.php?page=reinit_password');;</script>";
    					    }
    					}
    				}
    			}
    			else {
    				echo '<h1 id="msgerreur">Login / mot de passe incompatible</h1><br/>';
    			}
    
    			$unLicencie = null;
    			$bdd = null;
    			$ligne = null;
    
    		}else
    		{
    			echo '<h1 id="msgerreur">Erreur de connexion</h1><br/>
    					Veuillez vérifier que tous les champs sont renseignés';
    		}
    	}
    ?>
    
    <div id="bloc">
    	<?php if(!$Inscription_OK)
    	{
    		//require_once 'fonctions/fonctions_generales.php';
    		//afficher_libelle_donnees_obligatoire();
    	?>
    
    
    <form method="post" action="" id="form_inscription">
    	<label> Login <em>*</em></label>
    		<input type="text" name="login" size="20" value="<?php echo $login; ?>" required/> <br/><br/>
    	<label> Mot de passe <em>*</em> </label> 
    		<input type="password" name="password" size="16" required/> <br/>
    	<br/><br/>
    	<center>
    		<input type="submit" value="Connexion" name="submit" />
    		<input type="reset" value="Effacer" />
    	</center>
    </form>
    	<?php
    	}
    	?>
    	
    	<?php if($Inscription_OK)
    	{
    		echo $prenom . ' '. $nom . ',';?>
    		votre inscription a été prise en compte.<br/>
    		Nous vous en remercions.<br/><br/>
    		Un mail a été envoyé pour confirmer votre adresse mail : <?php echo $email;?>.<br/><br/>
    		
    		Tant que la confirmation du mail n'a pas été faite, tu ne pourras pas vous connecter sur le site.<br/><br/>
    		
    		Une fois la confirmation effectuée, l'administrateur validera votre inscription.
    	<?php
    	}
    	else 
    	{
    		?>
    		<p>
    		<center>
    		<a href='index.php?page=recup_login'>Récupérer son identifiant de compte</a> &nbsp &nbsp &nbsp
    		<a href='index.php?page=demander_new_password'>Demander un nouveau mot de passe</a>
    		</center>
    		</p>
    		
    		<?php 
    	}
    	?>
    </div>
    une fois validé, une redirection est faite sur une autre page et là, les variables SESSION ne sont plus connues.

    J'ai ceci comme erreur :
    Notice: Undefined variable: _SESSION in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\projects\SCF\core\html\menu_dropdown.php on line 9
    C'est quoi le pb ?

    Merci pour votre aide.

    Eddy

  2. #2
    Membre éclairé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2012
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2012
    Messages : 416
    Points : 747
    Points
    747
    Par défaut
    Bonjour,

    session_start() doit apparaitre au début de chaque script php de votre projet. Est-ce le cas ?

    De plus, session_start() doit être placé avant tout affichage, ce qui n'est pas le cas dans la portion de code que vous avez posté.

    Mettez session_start() au tout début de vos scripts (après les éventuelles instructions liées au namespaces et avant toute instruction echo ou code HTML).

  3. #3
    Membre du Club
    Homme Profil pro
    Cobol sur Mainframe et Unix AIX
    Inscrit en
    Mars 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cobol sur Mainframe et Unix AIX

    Informations forums :
    Inscription : Mars 2012
    Messages : 196
    Points : 69
    Points
    69
    Par défaut
    effectivement, je voulais faire le start() une fois que le login est validé et correct.

    En revanche, je ne comprend pas qu'il faille le mettre dans chaque page php. Il ne risque pas d'avoir une erreur
    session_start already start
    ?

    En tout cas, merci pour ton aide

  4. #4
    Membre éclairé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2012
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2012
    Messages : 416
    Points : 747
    Points
    747
    Par défaut
    Au début de chaque script oui.

    Par contre si vous faites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    session_start();
     
    require 'unficher.php';
     
    require 'unautrefichier.php';
    Vous ne devez pas appeler session_start() ni dans unfichier.php ni dans unautrefichier.php.

    Si vous devez utiliser unfichier.php ou unautrefichier.php seul (appel ajax ou autre) et que vous avez besoin de la session, vous pouvez éventuellement y placer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(empty(session_id()) {
        session_start();
    }
    J'espère avoir été assez clair

  5. #5
    Membre du Club
    Homme Profil pro
    Cobol sur Mainframe et Unix AIX
    Inscrit en
    Mars 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cobol sur Mainframe et Unix AIX

    Informations forums :
    Inscription : Mars 2012
    Messages : 196
    Points : 69
    Points
    69
    Par défaut
    si j'utilise ce code, je récupèrerai les variables sessions créés dans la page appelante ?

  6. #6
    Membre du Club
    Homme Profil pro
    Cobol sur Mainframe et Unix AIX
    Inscrit en
    Mars 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cobol sur Mainframe et Unix AIX

    Informations forums :
    Inscription : Mars 2012
    Messages : 196
    Points : 69
    Points
    69
    Par défaut
    Bonjour,

    Quand je déploie mon site sur un serveur, ça fonctionne avec Chrome, mais quand j'utilise IE ou Firefox, les variables sessions sont perdues.
    Alors, pourquoi avec Chrome ça marche et pas avec les autres sur le même serveur ?

    Merci pour votre aide.

    Eddy

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/09/2013, 18h06
  2. Problème de durée de mes variables en session
    Par casho dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 21/08/2007, 13h57
  3. Réponses: 2
    Dernier message: 13/11/2006, 15h57
  4. Réponses: 1
    Dernier message: 25/07/2006, 15h52
  5. ZoneAlarm bloque mes variables de session PHP en local
    Par GritNatz dans le forum Sécurité
    Réponses: 3
    Dernier message: 24/06/2006, 14h20

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