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

Statut
N'est pas ouverte pour d'autres réponses.
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: ...
 

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?
 

Jereck

Α & Ω
Staff
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)) {
 
1er
OP
P

PunkDeLuxe

condom
FoX SpeEd a dit:
je pense que les sessions doivent etre envoyer avant tout le html et avant tout echo ...
C'est le session_start() qui doit être créer avant tout HTML


FoX SpeEd a dit:
bete question: elle sert a quoi la redirection vers yahoo?
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 ;)
 

mOrbide

Elite
Jereck a dit:
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.

J'allais demander: c'est quoi l'utilité du GLOBAL ? J'ai déjà vu ça dans plusieurs scripts/fonctions et j'ai jamais capté :/

A part ça le md5 est clairement nécéssaire
 

Calvin80

Respect is key
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..) ?
 
1er
OP
P

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:
 

Calvin80

Respect is key
heu... bêtes question (ou je pose bcp de bêtes questions..) :

tu as bien fait un session_start(); dans ton index.php?
 
1er
OP
P

PunkDeLuxe

condom
Calvin80 a dit:
heu... bêtes question (ou je pose bcp de bêtes questions..) :

tu as bien fait un session_start(); dans ton index.php?
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)
 

Calvin80

Respect is key
vraiment curieux tout ça...
si tu as du novueau, poste le !!
 
1er
OP
P

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)
 

Calvin80

Respect is key
etonnant...

enfin le principal c'est que ça marche ;)
 

Calvin80

Respect is key
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.
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut