Sessions php

Résolu
Fetide68 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
Fetide68 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un problème avec des sessions : ce ne sont pas vraiment des sessions. elles marchent une seule fois et après, dès que je clique sur un lien, la session est détruite.

Tout se passe sur la page index. Et voici le code (simplifié) :

<?php 
	include ('header.php');

	// J'ouvre une session sir le mot de passe et le login ont été saisis :
	if ($_POST['login'] != "" && $_POST['login'] != "") {
		session_start();
		
		$_SESSION['login'] = $_POST['login'];
		$_SESSION['password'] = $_POST['password'];
	}

	// Je teste ma session :
	if (isset($_SESSION['login']) && isset($_SESSION['password'])) {
		// conneexion à la base de données
		require ('connect.php');
		
		// requête :
		$reponse = mysql_query ("SELECT * FROM bdd WHERE login = '".$_SESSION['login']."' AND password = '".$_SESSION['password']."'");
		
		// Si l'utilisateur existe :
		if ($donnees = mysql_fetch_array($reponse)) {
			echo "C'est bon !";
		}
		// Sinon :
		else {
			// Ici j'ai mon formulaire de connexion
		}
		
		// Déconnexion de la base de données.
		require ('deconnect.php');
	}
?> 
Configuration: Windows Vista
Firefox 3.5.1

47 réponses

  • 1
  • 2
  • 3
Résumé de la discussion

Problème rencontré : des sessions PHP ne se pérennisent pas, la connexion se perd après chaque navigation et la vérification des identifiants est faite sur la page index. Des éléments suggèrent de déplacer session_start() hors d'un test conditionnel afin que la session soit démarrée sur chaque page nécessitant $_SESSION, et non uniquement après la saisie du formulaire. Certains avertissent aussi que la configuration peut bloquer les cookies ou les sessions côté serveur, et recommandent des vérifications comme l'activation des cookies ou l'usage de .htaccess pour session.auto_start. En outre, certaines propositions évoquent d'assurer la cohérence de la logique entre pages et de vérifier que les résultats de connexion restent accessibles après les redirections ou les appels vers d'autres scripts.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
     
    t pas oblige de modifier ton php ini, c'est mieux c'est sur mais suivant l'hergeur tu ne peut pas le toucher,heureusement y'a une solution toute simple:

    tu peut en debut de tes pages mettre ceci
    ini_set ( 'session.auto_start' , 1 );

    cela va obliger ton serveur a demarrer les session a chaque fois que tu appelera cette page, bien sur si tu a plein de pages c'est sur qu'il vaut mieux configurer ton php.ini, alors dans ce cas place ces instructions dans un .htaccess
    1
  2. Deep
     
    Il me semble qu'il faut répeter sur les pages suivantes :
    session_start();
    sinon on perd la session
    0
  3. Fetide68 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   32
     
    J'ai mis le session_start(); partout, ça ne marche pas !
    0
  4. biboo
     
    Ton session_start(); tu l'as bien mis en dehors de toute condition (en dehors d'un "if").
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Fetide68 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   32
     
    Oui je viens de remarqué ça, j'ai changé, mais j'ai toujours le problème.
    0
  7. biboo
     
    (Suite)
    Parce qu'avec ton code, ce n'est pas bon.
    Il faut mettre ton session_start() en dehors du if, ce qui te permet de tester l'existence de $_SESSION['login'] (pour ta requête SQL).
    Le problème surviendra après, si tu rafraîchis ta page, tu n'auras pas de session_start() puisque celui ci sera dans le if..
    0
  8. biboo
     
    Voilà ce que je ferais :

    <?php 
    	session_start();
    		
                    include ('header.php');
    
    	// J'ouvre une session sir le mot de passe et le login ont été saisis :
    	if ($_POST['login'] != "" && $_POST['login'] != "") {
    		// J'ai déplacé le session_start() du if.		
    		$_SESSION['login'] = $_POST['login'];
    		$_SESSION['password'] = $_POST['password'];
    	}
    
    	// Je teste ma session :
    	if (isset($_SESSION['login']) && isset($_SESSION['password'])) {
    		// conneexion à la base de données
    		require ('connect.php');
    		
    		// requête :
    		$reponse = mysql_query ("SELECT * FROM bdd WHERE login = '".$_SESSION['login']."' AND password = '".$_SESSION['password']."'");
    		
    		// Si l'utilisateur existe :
    		if ($donnees = mysql_fetch_array($reponse)) {
    			echo "C'est bon !";
    		}
    		// Sinon :
    		else {
    			// Ici j'ai mon formulaire de connexion
    		}
    		
    		// Déconnexion de la base de données.
    		require ('deconnect.php');
    	}
    ?> 
    
    
    0
  9. le père
     
    Bonjour

    Pendant que tu y étais, tu aurais pu corriger
    	if ($_POST['login'] != "" && $_POST['password'] != "")


    Sortir le session_start() de ce if là ne sert pas à grand chose. Si le formulaire n'est pas rempli, les données de session sont perdues, mais ce ne serait pas un problème, au contraire, c'est plutôt un moyen d'effacer des traces de la session précédente.
    Je pense que le problème se situe dans la page cible du lien
    0
  10. Fetide68 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   32
     
    Je désespère, je repasse mes scripts en boucle, mais ça ne change rien !
    0
  11. Fetide68 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   32
     
    Je pense qu'il faut sortir le session_start(); sinon lorsque la condition n'est pas remplie, c'est à dire quand il n'y a pas de poste, la session ne démarre pas.

    De quelles pages cibles tu parles ?

    C'est vrai qu'en fait à la place du "echo 'c'est bon'; j'ai mis ça :

    		if ($donnees = mysql_fetch_array($reponse)) {
    		
    			$page = $_GET['page'];
    			
    			if (isset($page)) {
    				session_start();
    				include ($page.'.php');
    			}
    			else {
    				?>
    					<table>
    						<tr>
    							<td>Index</td>
    						</tr>
    					</table>
    				<?php
    			}
    		}	
    
    0
  12. lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
     
    si tu utilise les session session_start(); est a mettre obligatoirement en debut de code tout de suite apres <?PHP avant tout autre bribes de code , c'est tres tres important.

    (a moins il me semble que le serveur soit configuré pour demarrer une session des que qu'une page php soit rencontrer pour ca voir le http.conf, par defaut c'est desactivé)
    0
  13. le père
     
    Si tu utilise les session session_start(); est a mettre obligatoirement en debut de code tout de suite apres <?PHP avant tout autre bribes de code , c'est tres tres important.
    Non, ça n'a aucune importance. Il faut seulement qu'il soit mis avant l'envoi d'informations au client.

    ->Fetide68 : la cible dont je parle, c'est la page à laquelle aboutit le lien que sur lequel tu cliques : dès que je clique sur un lien, la session est détruite
    0
    1. lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
       
      Non, ça n'a aucune importance. Il faut seulement qu'il soit mis avant l'envoi d'informations au client.

      j'ai mal formulé mais c'est ce que je voulais dire... ;-)
      0
  14. Fetide68 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   32
     
    Ja saisis mal pourquoi la session est détruite à chaque fois que l'on clique sur un lien ? Normalement et par défaut, les sessions devraient durer au moins une demie heure ??

    J'ai testé en local et en ligne, mais je n'ai pas de résultat... je ne pense pas que le fichier httpd.conf soit en cause alors, sinon je ne sais pas où se trouve l'information.
    0
  15. lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
     
    si tu demarre pas une session avec session_start() a chque nouvelle page c'est normal que la session soit perdue et ce n'est qu'une fois demarre que la session expire dans xx minutes..
    0
  16. sunburn23 Messages postés 33 Statut Membre
     
    faux.. Les pages de mon site demarre toutes avec un sessions start et la session n'est pas detruite :

    exemple :

    <?php
    require("../passe/conf.php3");
    $db_link = mysql_connect($sql_serveur,$sql_user,$sql_passwd);
    $db = mysql_select_db("dbase",$db_link) or die ("Pas de base sous ce nom");

    //connaitre le numero de la page appeler
    $p=empty($_GET['p']) ? 1 : $_GET['p'];

    //requetes
    session_start() ;

    $nom = $_POST['nom'];
    $pass = $_POST['pass'];

    $sql="select * from connexion where nom='$nom' and pass='$pass'";
    $envoi=mysql_query($sql);
    $nb=mysql_num_rows($envoi);

    //si la session ne comporte pas encore de données ou quelles sont egales a 0
    if( (($_SESSION['nom']=="")||($_SESSION['pass']=="")) || (($_SESSION['nom']=="0")||($_SESSION['pass']=="0")) )
    {

    // et seulement si la requete a renvoyé un resultat indiquant que le mot de pass et lidentifiant sont correct
    if($nb==1)
    {

    //alors on rempli la session avec les bonne variable
    $_SESSION['nom'] = $nom;
    $_SESSION['pass'] = $pass;
    }

    //sinon rien
    }
    else

    //si la session comporte deja un identifiant et un pass... alors on utilise cette session pour les autre requetes
    {
    $nom = $_SESSION['nom'];
    $pass = $_SESSION['pass'];
    }

    $sql="select * from connexion where nom='$nom' and pass='$pass'";
    $envoi=mysql_query($sql);
    $nb=mysql_num_rows($envoi);

    ?>
    0
  17. lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
     
    heureusement qu'elle sont pas detruite ... sinon a quoi ça sert de demarrer une session lol !!!

    je t'invite a potasser les sessions.
    Une session a une durée de vie definie par le php.ini via session.gc_maxlifetime 1440 seconde par defaut(je crois)
    tu peut parametrer les session en autostart en passant la directive session.auto_start = 1, par defaut c'est a 0
    Donc si tu ne met pas session_start en haut de tes pages et que ta directive session.auto_start = 0 tes session ne demarrerons pas
    0
  18. Fetide68 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   32
     
    Merci à tous...

    And the winner is lewis34. J'ai changé le php.ini : session.auto_start = 1 au lieu de 0 et ça marche... en local, mais pas en ligne !

    Je suis héberger chez 1and1.fr et je ne sais pas si je peux effectuer ce genre de manipulations.
    0
  19. jjsteing Messages postés 1613 Date d'inscription   Statut Contributeur Dernière intervention   181
     
    tout dépend si tu as un serveur dédier ou mutualiser... dans le 1er cas, oui, dans l'autre(le plus courrant) non...
    Donc il faut mettre session_start() ; dans les premieres ligne de ton index.php..

    Si tu veux que l utilisateur s'authentifie obligatoirement, tu peux le rediriger sur la page d authentification avec quelque chose comme :

    if (!isset($_Session['name'])){
    header('location: MaPageAuthentification.php');
    exit();
    }

    ;)
    0
  20. Fetide68 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   32
     
    Top cool ! Merci, je mets le post en résolu avec plaisir. Je pense que d'autres y trouveront leur compte...
    0
  21. Fetide68 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   32
     
    Ca marche très bien en local, mais pas sur 1and1...
    0
  • 1
  • 2
  • 3