Les archives de FluxBB.fr
Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
J'ai besoin d'avoir des informations sur la fonction unserialize.
Bon bien sûr j'ai cherché sur google, fait 1000 tests qui fonctionnent sauf quand je prends la source du fichier function... donc c'est ici que je crie au secours.
J'ai besoin de récupérer 'user_id' qui se trouve dans le cookie de façon serializer.
J'essaie en vain de faire un unserial, mais je me sens devenir serialkiller 
Si j'exécute le code ci-dessous, j'arrive à unserializer:
<?$a = array(1,2,3) ;$a[3] = array(6,7,8) ;
setCookie(test, serialize($a)) ;?>Valeur brute reçue : <? echo $_COOKIE['test']; ?>
<br/>Valeur decodee : <?$b = unserialize($_COOKIE['test']) ;print_r($b) ;echo"<br/>";?>
Si je remplace la valeur de $a par la ligne de création du cookie de punbb, ça marche pas.
<?$a = array($user_id, md5($cookie_seed.$password_hash));
setCookie(test, serialize($a)) ;?>Valeur brute reçue : <? echo $_COOKIE['test']; ?>
<br/>Valeur decodee : <?$b = unserialize($_COOKIE['test']) ;print_r($b) ;echo"<br/>";?>
Et bien sûr les valeurs $user_id, $cookie_seed et $password_hash sont définis plus haut dans le code.
De toutes façons si je mets des chiffres à la place de ces trois variables, ça passe pas.
Apparemment ce serait le md5 qui poserait problème ???
J'ai fait un autre test en ajoutant en plus urlencode après la serialization, ça marche (et urldecode ensuite).
Mais premièrement je n'ai pas envie d'effectuer des modifications sur le code de punbb, et deuxièmement j'aimerais savoir ce qui cloche.
Et le code ci-dessous mis dans un autre fichier ne fonctionne pas non plus, opération du saint-esprit ?
list($cookie['user_id'], $cookie['password_hash']) = @unserialize($_COOKIE[$cookie_name]);
Avez-vous déjà rencontrer ce soucis ?
Dernière modification par the webmaster (03-10-2006 17:32:43)
Hors ligne
voici un bout de code issu du fichier common.php de PunBB :
// Turn off magic_quotes_runtime
set_magic_quotes_runtime(0);
// Strip slashes from GET/POST/COOKIE (if magic_quotes_gpc is enabled)
if (get_magic_quotes_gpc())
{
function stripslashes_array($array)
{
return is_array($array) ? array_map('stripslashes_array', $array) : stripslashes($array);
}
$_GET = stripslashes_array($_GET);
$_POST = stripslashes_array($_POST);
$_COOKIE = stripslashes_array($_COOKIE);
}essai de le mettre en tête de ton scripts
Hors ligne
tiens et voici le code de la page de test que j'ai utilisé :
<?php
@ini_set('display_errors','on');
error_reporting(E_ALL);
#--------------------------------------------------------------------
// Turn off magic_quotes_runtime
set_magic_quotes_runtime(0);
// Strip slashes from GET/POST/COOKIE (if magic_quotes_gpc is enabled)
if (get_magic_quotes_gpc())
{
function stripslashes_array($array)
{
return is_array($array) ? array_map('stripslashes_array', $array) : stripslashes($array);
}
$_GET = stripslashes_array($_GET);
$_POST = stripslashes_array($_POST);
$_COOKIE = stripslashes_array($_COOKIE);
}
#--------------------------------------------------------------------
/*
$a = array(1,2,3);
$a[3] = array(6,7,8);
//*/
//*
$a = array('45', md5('4bdfb5df4gh5d4fbg54s54g5843145sg'));
$a[] = array(array('string', true, 4567));
//*/
if (!empty($_POST['form_sent']))
{
$b = unserialize($_COOKIE['test']);
}
else {
setCookie('test', serialize($a));
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Page test !</title>
</head>
<body>
<h1>Page test !</h1>
<?php if (!empty($_POST['form_sent'])) : ?>
<p>Valeur linéarisée :</p>
<pre><?php echo $_COOKIE['test']; ?></pre>
<hr />
<p>Valeur dé-linéarisée : </p>
<pre><?php var_export($b);?></pre>
<hr />
<a href="<?php echo $_SERVER['REQUEST_URI'] ?>"><strong>Retour</strong></a>
<?php else : ?>
<form action="<?php echo $_SERVER['REQUEST_URI'] ?>" method="post">
<input type="hidden" name="form_sent" value="1" />
<input type="submit" value="cookit" />
</form>
<?php endif; ?>
</body>
</html>si tu commente la partie citée dans le précédent message on as une erreur due à l'échapemenent automatique des guillemets ; je pense que c'est ça ton problème
Hors ligne
Bon un grand merci...
Je pense que ce serait bien que tu sois administrateur d'un forum... parce chapeau! 
En fait il me manquait exactement le code que tu m'a passé.
Plus strictement je n'ai besoin que de:
if (get_magic_quotes_gpc())
{
function stripslashes_array($array)
{
return is_array($array) ? array_map('stripslashes_array', $array) : stripslashes($array);
}
$_COOKIE = stripslashes_array($_COOKIE);
}
J'ai donc des Undefined index, et Undefined variable comme message d'erreur au début, je dois donc revoir la structure de mon code mais c'est une autre histoire.
Encore merci.
Hors ligne
Pages : 1