[résolu]Création d'une session dans une fonction

Discussion dans 'Web, design' créé par PunkDeLuxe, 24 Janvier 2006.

Statut de la discussion:
Fermée.
  1. Offline
    PunkDeLuxe condom
    Voici mon code, ce code est ma fonction pour la création de session pour mon site :

    Code:
    function connexionAuSite($login, $pass) {
    		GLOBAL $db_host, $db_login, $db_password, $db_name;
    		
    		if (empty($login) && empty($pass)) {
    			
    		} else {
    			$mysql_link = mysql_connect($db_host,$db_login,$db_password);
    			$mysql_db = mysql_select_db($db_name,$mysql_link);
    			$query = "SELECT usrID, usrPass, usrMail, usrLevel FROM dkp_users WHERE usrLogin = \"$login\"";
    			$result = mysql_query($query) or die('Erreur SQL : '.mysql_error());
    		
    			$data = mysql_fetch_array($result);
    			if($data['usrPass'] != $pass) {
    				header("Location: ../../index.php?page=connexion");
    			} else {
    				
    				$_SESSION['conLogin'] = $login;
    				$_SESSION['conSite'] = 1;
    				$_SESSION['conLevel'] = $data['usrLevel'];
    				$_SESSION['conID'] = $data['usrID'];					
    					
    				header("Location: ../../index.php");
    				
    			} 
    		}
    		
      	}
    Donc tout le code fonctionne sauf, ces 4 lignes :/ un peu génant, quand on sait que c'est ce qui servira pour la session.

    Code:
    $_SESSION['conLogin'] = $login;
    $_SESSION['conSite'] = 1;
    $_SESSION['conLevel'] = $data['usrLevel'];
    $_SESSION['conID'] = $data['usrID'];
    Mes questions sont, doit-on retourner $_SESSION sachant que c'est une super-globale (pas besoin de la déclarer dans les globals de la fonction ...) ?? Y-a-t-il moyen de créer les variables de sessions de cette manière ??

    Biensur je fait mon session_start avant mon code "HTML".

    Voici le site : http://alexandre.dumont-v.be/fgm/
    => Connexion, Login : Cawa | Pass : test


    PS : les sessions et moi :cool: ...
    PunkDeLuxe, 24 Janvier 2006
    #1
  2. Offline
    FoX SpeEd Touriste
    je pense que les sessions doivent etre envoyer avant tout le html et avant tout echo ...


    bete question: elle sert a quoi la redirection vers yahoo?
    FoX SpeEd, 24 Janvier 2006
    #2
  3. Online
    Jereck Procrastinateur
    Equipe GamerZ.be
    Code:
    GLOBAL (...) $_SESSION;
    il me semble que comme ça, tu crées une 2e variable $_SESSION, de poirtée moindre que la super-globale de PHP.
    essaie en virant cette re-définition.


    Et je te conseillerait aussi de crypter le mot de passe : tu stockes dans la DB le résultat du md5() sur le mot de passe d'origine et tu changes ta condition en
    if($data['usrPass'] != md5($pass)) {
    Jereck, 24 Janvier 2006
    #3
  4. Offline
    PunkDeLuxe condom
    C'est le session_start() qui doit être créer avant tout HTML


    A tester si ca passe ;)


    Jereck ca ne change rien :-(
    Pour les structure de contrôle, ca viendra après ;) et y a pas que le hashage qui sera prit en compte, c'est juste que là je pose les base du script ;)
    PunkDeLuxe, 24 Janvier 2006
    #4
  5. Offline
    mOrbide Elite
    mOrbide, 25 Janvier 2006
    #5
  6. Offline
    Calvin80 Elite
    j'ai testé ton site: chez moi je suis redirigié vers ../../index.php

    peux tu faire faire un print_r($_SESSION); juste après la declaration de tes variables de session, pour voir un peu ce que ça donne (et virer la redirection, sinon ça va te mettre une erreur..) ?
    Calvin80, 25 Janvier 2006
    #6
  7. Offline
    PunkDeLuxe condom
    Code:
    Array ( [conLogin] => Cawa [conSite] => 1 [conLevel] => 0 [conID] => 1 )
    La session à bien l'air d'être créée, mais une fois que je suis redirigé vers l'index.php ... elle n'est plus là.

    Voici le code (simplifié, j'ai retiré un grand nombre de lignes dû à la création du template) du header du site :

    Code:
    <?
    	// Déclaration de la session d'utilisation
    	session_start();
    	.......
    	// Valeur de connexion (connecté ou pas) + envoie dans le template
    	if (isset($_SESSION['conSite'])) {
    		// Afficha du lien + du mot exacte
    		$conYesOrNo = "deconnexion";
    		$conTexte = "Déconnexion";
    		$conProfil = "<a href=\"index.php?page=profil&id=".$_SESSION['conID']."\">Profil</a> -";
    		
    		$tpl->set_var("dkpConLink", $conYesOrNo);
    		$tpl->set_var("dkpConTxt", $conTexte);
    		$tpl->set_var("dkpConProfil", $conProfil);
    	} else {
    		// Afficha du lien + du mot exacte
    		$conYesOrNo = "connexion";
    		$conTexte = "Connexion";
    		$conProfil = "<a href=\"index.php?page=inscription\">Inscription</a> -";
    		
    		$tpl->set_var("dkpConLink", $conYesOrNo);
    		$tpl->set_var("dkpConTxt", $conTexte);
    		$tpl->set_var("dkpConProfil", $conProfil);
    	}
    	.......
    ?>
    Alors la logique voudrait que comme, la variable $_SESSION['conSite'] est créée et qu'elle est censée existée, qu'elle affiche les liens Profil et déconnexion à la place de inscription et connexion...


    Pour ce qui est du md5 je sais très bien, mais pas pour le moment, ca sert à rien de tout vouloir faire en même temps alors qu'il y a plus important qui ne fonctionne pas encore (même si ca me prendra 2minutes pour le faire ;))

    Quand on construit une maison, on ne commence pas par tapisser, mais par les fondations ... même chose ici :cool:
    PunkDeLuxe, 25 Janvier 2006
    #7
  8. Offline
    Calvin80 Elite
    heu... bêtes question (ou je pose bcp de bêtes questions..) :

    tu as bien fait un session_start(); dans ton index.php?
    Calvin80, 25 Janvier 2006
    #8
  9. Offline
    PunkDeLuxe condom
    Dans l'index non mais dans le header,avant que tout code html ne soit produit oui. Et même en le mettant dans l'index.php avant tout, ca fonctionne pas :-( (je viens de tester)
    PunkDeLuxe, 25 Janvier 2006
    #9
  10. Offline
    Calvin80 Elite
    vraiment curieux tout ça...
    si tu as du novueau, poste le !!
    Calvin80, 25 Janvier 2006
    #10
  11. Offline
    PunkDeLuxe condom
    Voilà enfin trouvé le bug :? Quand la théorie est d'accord avec la pratique ...


    Comme tout le monde le sait, les variables créées dans une fonction sont locales et non globales, à moi donc de créer un tableau que je retournerai dans cette fonction, puis à moi de récuper les valeurs de ce tableau que j'assignerai à $_SESSION ...

    Pour preuve, lorsque je fait appel à print_r($_SESSION) dans la fonction, celle-ci m'affiche bien le contenu de $_SESSION, mais lorsque quand j'ai finit avec ma fonction et que celle-ci me redirectionne vers une page test.php ayant cette même print_r($_SESSION) ... celle-ci ne m'affiche rien (page blanche ...)




    Merci Calvin80 pour : print_r($_SESSION)
    PunkDeLuxe, 25 Janvier 2006
    #11
  12. Offline
    Calvin80 Elite
    etonnant...

    enfin le principal c'est que ça marche ;)
    Calvin80, 26 Janvier 2006
    #12
  13. Offline
    Calvin80 Elite
    Noel, j'ai fait quelques tests pour vérifier un peu tout ça. mon REGISTER_GLOBALS est à off

    voici deux fichiers A et B.

    contenu de A:
    Code:
    <?php
    session_start();
     function test()
     {
    
    	echo "je suis dans test<br>";
    	$_SESSION['test']="ceci est un test";
    	echo "contenu de session depuis test de A <pre>"; print_r($_SESSION);echo "</pre>";
     }
     test();
    echo "contenu de session depuis le main de A <pre>"; print_r($_SESSION);echo "</pre>";
     ?>
    
    contenu de B:
    Code:
    <?php
    session_start();
    echo "contenu de session depuis le main de B <pre>"; print_r($_SESSION);echo "</pre>";
     ?>
    
    TEST:

    je vais sur A.php, html retourné :
    Code:
    je suis dans test
    contenu de session depuis test de A 
    Array
    (
        [test] => ceci est un test
    )
    
    contenu de session depuis le main de A 
    Array
    (
        [test] => ceci est un test
    )
    
    je vais sur B.php

    Code:
    contenu de session depuis le main de B 
    Array
    (
        [test] => ceci est un test
    )
    
    Conclusion :
    grace au test A.php : la fonction "test" de A insère des éléments dans la la super globale $_SESSION sans problème, et ces éléments restent définis à l'extèrieur de la fonction
    grâce au test B.php : ces elements sont également définis sur une autre page (heureusement;) )
    Donc.. je comprends toujours pas pourquoi ça fonctionnait pas chez toi.
    Calvin80, 26 Janvier 2006
    #13
Statut de la discussion:
Fermée.