pb avec les sessions

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 : pb avec les sessions

par yann_g » 31 juil. 2006, 18:45

hop ! tout-à-fait !

par Truc » 31 juil. 2006, 18:43

On peut considérer que c'est [Résolu] ?

par yann_g » 31 juil. 2006, 18:37

merci, je me serais arraché les cheveux à dépouiller mon code ! merci encore !

par Truc » 31 juil. 2006, 18:32

Essaie en renommant la variable, sinon je ne vois pas d'erreurs:
$id = $_GET['id'];
en
$id_url = $_GET['id'];
$sql = "SELECT * FROM rsc_samples WHERE id = ".$id_url;
sinon modifie l'identifian de session :
$_SESSION['id_user']
ce n'est pas vraiment une solution d'esquive mais c'est surtout que les variables sont automatiquement crées avec le register_global à "on" et avec les mêmes indices... :?

par logikstik » 31 juil. 2006, 18:30

Je trouve ça plus clair de cette façon, non ?
<?php 

session_start();

// redir si utilisateur pas loggué
if (!isset($_SESSION['id'])) 
{
	header('Location: login.php?redir=rsc_manage.php');
}

// connection BDD
include 'connexion.php';

// démarrage de la session si cookie
if (!isset($_SESSION['moniker']) && isset($_COOKIE['OOImoniker'])) 
{
	$sql = "SELECT * FROM utilisateurs WHERE moniker = '".$_COOKIE['OOImoniker']."'";
	$req = mysql_query($sql) or die (mysql_error());
	$raw = mysql_fetch_array($req);
	
	if (mysql_num_rows($req) > 0)
	{
		$_SESSION["moniker"] = $_COOKIE['OOImoniker'];
		$_SESSION["id"]      = $raw['id'];
		$_SESSION['email']   = $raw['email'];
	}
}

// RéCUP BDD
if (isset($_GET['id']))
{
    $id  = $_GET['id'];
    $sql = "SELECT * 
			FROM rsc_samples 
			WHERE id = ".$id;
    
	$req = mysql_query($sql) or die(mysql_error());
    $row = mysql_fetch_array($req);
}
else 
{
	header('Location: rsc_manage.php');
}
if (isset($_POST['poste']))
{
    if ($_POST['poste'] == 'YES')
	{
        $reponse    = $_POST['delete'];
        $id_ceaumor = $_POST['id_ceaumor'];
        
        // on vérifie que l'auteur est bien l'utilisateur loggué
        $sql = "SELECT * 
				FROM rsc_samples 
				WHERE id = ".$id_ceaumor;
	    $req = mysql_query($sql) or die(mysql_error());
        
		$id_auteur = mysql_result($req, 0, 'id_auteur');
        
		if ($reponse == 'oui' && $id_auteur == $_SESSION['id'])
		{
            $sql = "DELETE FROM rsc_samples WHERE id = ".$id_ceaumor;
            mysql_query($sql) or die(mysql_error());
            
			$_SESSION['msg']       = FILE_DELETED;
            $_SESSION['msg_class'] = 'ok';
        }
        else if ($reponse == 'non')
		{
            $_SESSION['msg']       = FILE_NOT_DELETED;
            $_SESSION['msg_class'] = 'ok';            
        }
		
        if ($id_auteur != $_SESSION['id'])
		{
            $_SESSION['msg']       = YOU_ARE_NOT_THE_OWNER_OF_THOSE_FILES;
            $_SESSION['msg_class'] = 'err';
        }
		
        header('Location: rsc_manage.php');
    }
}

// si pas d'erreur
if (!isset($err1) && !isset($err2[0]) && isset($_POST['poste']))
{
    $sql = "UPDATE rsc_samples 
			SET adresse = '".$row['adresse']."', 
			format = '".$row['format']."', 
			nom = '".$row['nom']."', 
			description = '".$row['description']."', 
			categories = '".$row['categories']."' 
			WHERE id = ".$id;
    
	mysql_query($sql) or die ($sql."<br />".mysql_error());
    
	header('Location: rsc_manage.php');
}

?>

par yann_g » 31 juil. 2006, 17:48


session_start();

//	redir si utilisateur pas loggué
if (!isset($_SESSION['id'])) header ('Location: login.php?redir=rsc_manage.php');

//	connection BDD
include('connexion.php');

//	démarrage de la session si cookie
if (!isset($_SESSION["moniker"]) && isset($_COOKIE["OOImoniker"])) {
	$sql = "SELECT * FROM utilisateurs WHERE moniker = '".$_COOKIE['OOImoniker']."'";
	$req = mysql_query($sql) or die (mysql_error());
	if (mysql_num_rows($req) > 0) {
		$_SESSION["moniker"] = $_COOKIE["OOImoniker"];
		$_SESSION["id"] = mysql_result($req, 0, "id");
		$_SESSION['email'] = mysql_result($req, 0, "email");
	}
}

//RéCUP BDD
if (isset($_GET['id'])) {
	$id = $_GET['id'];
	$sql = "SELECT * FROM rsc_samples WHERE id = ".$id;
	$req = mysql_query($sql) or die(mysql_error());
	$fic_adresse = mysql_result($req, 0, 'adresse');
	$fic_nom_descr = mysql_result($req, 0, "nom");
	$fic_cat = mysql_result($req, 0, "categories");
	$fic_format = mysql_result($req, 0, "format");
	$fic_descr = mysql_result($req, 0, 'description');
	$fic_date = mysql_result($req, 0, "date");
}
else header('Location: rsc_manage.php');

if (isset($_POST['poste'])) {
	if ($_POST['poste'] == "YES") {
		$reponse = $_POST['delete'];
		$id_ceaumor = $_POST['id_ceaumor'];
		
		//	on vérifie que l'auteur est bien l'utilisateur loggué
		$sql = "SELECT * FROM rsc_samples WHERE id = ".$id_ceaumor;
		$req = mysql_query($sql) or die(mysql_error());
		$id_auteur = mysql_result($req, 0, "id_auteur");
		if ($reponse == "oui" && $id_auteur == $_SESSION['id']) {
			$sql = "DELETE FROM rsc_samples WHERE id = ".$id_ceaumor;
			mysql_query($sql) or die(mysql_error());
			$_SESSION['msg'] = FILE_DELETED;
			$_SESSION['msg_class'] = "ok";
		}
		elseif ($reponse == "non") {
			$_SESSION['msg'] = FILE_NOT_DELETED;
			$_SESSION['msg_class'] = "ok";			
		}
		if ($id_auteur != $_SESSION['id']) {
			$_SESSION['msg'] = YOU_ARE_NOT_THE_OWNER_OF_THOSE_FILES;
			$_SESSION['msg_class'] = "err";
		}
		header ('Location: rsc_manage.php');
	}
}

//	si pas d'erreur
if (!isset($err1) && !isset($err2[0]) && isset($_POST['poste'])) {
	$sql = "UPDATE rsc_samples SET adresse = '".$fic_adresse."', format = '".$fic_format."', nom = '".$fic_nom_descr."', description = '".$fic_descr."', categories = '".$fic_cat."' WHERE id = ".$id;
	mysql_query($sql) or die ($sql."<br />".mysql_error());
	header('Location: rsc_manage.php');
}
?>

par Truc » 31 juil. 2006, 17:18

Les joies du register_globals :?

Montre un peu le code où le problème se présente.

par yann_g » 31 juil. 2006, 17:15

c'est ce que je fais

par Truc » 31 juil. 2006, 17:07

Le principal c'est de récupérer toutes les variables en passant par les super globales POST, GET, SESSION ...

par yann_g » 31 juil. 2006, 16:25

je n'ai pas la possibilité de le mettre à off. (il est effectivement sur on)

il ne reste que la solution d'esquive ?

merci

par Truc » 29 juil. 2006, 22:21

Salut,
Encore une histoire de register_globals... exécute un phpinfo() pour vérifier la valeur (on-off).
Si tu peux modifier la configuration du serveur il est préférable de mettre cette directive à "off"

Toutes les variables passées par l'url doivent être récupérées par $_GET donc dans ton cas tu devrais avoir:
$id = $_GET['id'];
Tu peux aussi changer le nom de la variable tout simplement (mais c'est juste pour contourner):
$_SESSION['id_user'] = mysql_result($req, 0, 'id'); 

par Ouaibou » 29 juil. 2006, 21:54

Salut,

Serait-il possible de voir le reste du script ? Car sinon je suis pas sur que quelqu'un puisse t'aider.

+

pb avec les sessions

par yann_g » 29 juil. 2006, 21:29

bonjour,

j'ai un petit problème avec les sessions, une de mes variables est modifiée sans que je le demande. lorsque un utilisateur se loggue, j'affecte ma variable de session :
$_SESSION['id'] = mysql_result($req, 0, 'id');
et sur une de mes pages, pour chercher à résoudre un bug, j'affiche ma variable de session :
echo $_SESSION['id'];
et je m'aperçois que sa valeur est celle d'un $id récupéré par la méthode GET !!!

quelqu'un peut-il m'éclairer ???

(je précise que nulle part dans mon script je ne redéfinis $_SESSION['id'] - le bug ne se produit que sur mon serveur distant, sur mon serveur local tout va bien...)