problème session entre 2 serveurs différent

Mammouth du PHP | 531 Messages

20 sept. 2008, 13:00

Bonjour,

Je rencontre un problème assez bizarre entre mon hébergeur mutualisé et wamp en local.
Le problème est au niveau des sessions sur mon hébergement mutualisé.

Voici ce que donne un print_r en local de $_SESSION :

Array ( [membre] => 1 [pseudo] => supercanard [pwd] => coincoin [admin] => 1 )



Et voici ce que ça donne sur mon hébergement mutualisé :

Array ( [membre] => Array ( [1] => Array ( [id] => 1 [pseudo] => supercanard [motDePasse] => coincoin [admin] => 0 ) ) [pseudo] => supercanard [pwd] => coincoin [admin] => 0 )


Alors évidement lorsque je veut utiliser ces variables de session dans des requêtes, dans le deuxième cas c'est la pagaille car il essayer d'insérer des array au lieu du contenu de la variable de sessions.

Voici le code qui rempli la session :
$pseudo = protegeSql( strip_tags( $_POST['pseudo'] ) );
		$motDePasse = protegeSql( strip_tags( $_POST['motDePasse'] ) );
		foreach( $membre as $k => $v )
		{
			if( $v['pseudo'] == $pseudo ) // si on trouve le pseudo dans le tableau des membres, on cherche enssuite le mot de passe
			{
				if( $v['motDePasse'] == $motDePasse ) 
				{
					$_SESSION['membre'] = $v['id']; // on récupère l'id membre dans le tableau
					$_SESSION['pseudo'] = $pseudo;
					$_SESSION['pwd'] = $motDePasse;
					$_SESSION['admin'] = $v['admin'];
				}
			}
		}
Et voici au cas ou le tableau $membre...
function getMembre()
{
	global $membre;
	$req = "SELECT * FROM membre ORDER BY pseudo DESC";
	$res = mysql_query( $req ) or die( 'Erreur SQL' );
	$i = 1;
	while( $data = mysql_fetch_array( $res ) )
	{
		$membre[$i]['id'] = $data['id_membre'];
		$membre[$i]['pseudo'] = $data['pseudo'];
		$membre[$i]['motDePasse'] = $data['pwd'];
		$membre[$i]['admin'] = $data['admin'];
		$i++;
	}
	//echo '$membre : '; print_r( $membre ); echo '<br />';
}
EDIT :

Je viens de découvrir une piste. En local les register global sont à off alors que sur mon hébergement mutualisé elles sont activées. Celà dit je ne vois pas le rapport :?

Pour vous donner une idée du problème voici une requête qui pose problème sur mon hébergement mutualisé ( avec les register on donc ) :
function testerSession()
{
	$membre = $_SESSION['membre'];
	$pwd = $_SESSION['pwd'];
	$req = "SELECT id_membre FROM membre WHERE id_membre = $membre AND pwd = '$pwd'";
	echo $req;
	$res = mysql_query( $req ) or die( mysql_error() );
	if( mysql_num_rows( $res ) == 1 ) // si on trouve un membre correspondant aux info de la session on retourne vrai
	{
		return TRUE;
	}
}
Et voici son echo suivi du mysql_error :

SELECT id_membre FROM membre WHERE id_membre = Array AND pwd = 'coincoin'Unknown column 'Array' in 'where clause'

Je ne comprend pas pourquoi il considère $membre comme un tableau et pas $pwd...

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

21 sept. 2008, 02:08

Evite d'utiliser des variables homonymes pour des rôles différents.
La variable $membre joue le rôle de liste des membres trouvés par la fonction getMembre()
Pourquoi alors utiliser le mot "membre" pour stocker l'id du membre dans l'expression :
$_SESSION['membre'] = $v['id'];
Il fallait nommer la chose correctement : "id_membre" et ça donnerait :
$_SESSION['id_membre'] = $v['id'];
Effectivement, si register_globals est à on, toutes les variables superglobale sont converties automatiquement en variables simples. Ainsi, $_SESSION["membre"] devient $membre, de même $_POST["membre"] et $_GET["membre"]

Et puisque tu a déjà un tableau global nommé $membre, la confusion est donc totale car il y a dans ton programme un chevauchement entre le $membre (liste des membres) et le $_SESSION["membre"] qui porte l'id du membre.

Conclusion: je te conseille de nommer par le mot "id_membre" ce qui s'attache à l'id du membre et tu peux laisser le mot "membre" pour le tableau des membres.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 531 Messages

21 sept. 2008, 09:52

Ok merci pour les précisions je vais corriger tout mon script.

Ceci-dit l'activation des register gobal c'est donc pas terrible question sécurité... beaucoup d'hébergeurs les activent ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

21 sept. 2008, 10:13

Ceci-dit l'activation des register gobal c'est donc pas terrible question sécurité... beaucoup d'hébergeurs les activent ?
La grande majorité des hébergeurs les activent afin d'éviter les problèmes de compatibilité avec les scripts un peu anciens de leurs clients.
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 531 Messages

21 sept. 2008, 10:16

Bon je sais ce qui me reste à faire ^^
Merci pour les infos