problème session entre 2 serveurs différent

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : problème session entre 2 serveurs différent

par supercanard » 21 sept. 2008, 10:16

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

par @rthur » 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.

par supercanard » 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 ?

par sadeq » 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.

problème session entre 2 serveurs différent

par supercanard » 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...