amezghal
Messages postés385Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention21 août 2015
-
17 juin 2007 à 12:27
emmanuel_php
Messages postés1Date d'inscriptionvendredi 28 mai 2004StatutMembreDernière intervention20 septembre 2012
-
20 sept. 2012 à 11:37
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
emmanuel_php
Messages postés1Date d'inscriptionvendredi 28 mai 2004StatutMembreDernière intervention20 septembre 2012 20 sept. 2012 à 11:37
Bonjour à vous,
juste pour information:
Applications web : sécuriser la session utilisateur =>
cyberzoide.developpez.com/securite/session ça date de 2006 mais c'est toujours bon à prendre.
Bonne journée à vous.
cs_chacharito
Messages postés1Date d'inscriptionmardi 28 décembre 2010StatutMembreDernière intervention12 janvier 2011 12 janv. 2011 à 11:48
s 'il vous plait je veux une session qui permet de gérer une bande livraison ajouter une quantité et un cin et un on appuie sur une bouton puis on reçois un message de confirmation
hametsu21
Messages postés37Date d'inscriptionmardi 1 novembre 2005StatutMembreDernière intervention24 février 2008 25 juin 2007 à 20:52
J'utilise PHP 5.1.6, ma source actuellement est posté ici, pour pouvoir utiliser des tableaux à plusieurs dimensions, j'ai étendu ma classe par RecursiveArrayIterator, et me suis contenté de tester comme cela :
$session = new Session();
$session['test'] = array('un', 'deux', 'trois');
$session['test'][] = 'quatre';
print_r($session['test']);
Ce qui me provoque une erreure...
Il faut donc manipuler les classes et rajouter certaines méthodes, mais c'est plutôt flou tout ça :p
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 25 juin 2007 à 18:20
Il faudrait que je vois ton code et la manière dont tu l'as implémenté, dans ce cas, pour t'aider.
hametsu21
Messages postés37Date d'inscriptionmardi 1 novembre 2005StatutMembreDernière intervention24 février 2008 25 juin 2007 à 16:37
Oui, je suis d'accord mais comment faire le lien entre ça et ma source ?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 25 juin 2007 à 15:13
retourne toujours : Fatal error: Objects used as arrays in post/pre increment/decrement must return values by reference in /Users/quentinberlemont/Sites/session.php on line 83
hametsu21
Messages postés37Date d'inscriptionmardi 1 novembre 2005StatutMembreDernière intervention24 février 2008 25 juin 2007 à 12:42
donc faudrait juste que la classe Session extends RecursiveArrayIterator ?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 25 juin 2007 à 12:22
Bon allez, en réalité c'est très simple car tout est déjà fait :
hametsu21
Messages postés37Date d'inscriptionmardi 1 novembre 2005StatutMembreDernière intervention24 février 2008 22 juin 2007 à 16:59
Mouais, j'ai pas tellement réussis :/
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 21 juin 2007 à 09:00
Ah vi en effet :p
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 19 juin 2007 à 12:26
Oui, c'est ce que je voulais dire :-)
hametsu21
Messages postés37Date d'inscriptionmardi 1 novembre 2005StatutMembreDernière intervention24 février 2008 19 juin 2007 à 10:02
Tu voulais dire RecursiveIterator ? Avec un "A", je ne trouve rien...
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 19 juin 2007 à 09:32
Hello,
sauf que, Fhx, ça ne marche pas ton code.
$session->mon_autre_tableau[10] est pris pour une variable, pas un tableau, via les setter. Fais un print_r dessus.
Il faut implémenter arrayAccess avec d'autres interfaces/classes, dont recursiveAIterator.
hametsu21
Messages postés37Date d'inscriptionmardi 1 novembre 2005StatutMembreDernière intervention24 février 2008 19 juin 2007 à 08:36
Et si tu utilises l'implantation d'ArrayAccess, tu fais le même pour assigner une nouvelle valeur tu créer un nouveau tableau avec tes anciennes valeurs et tes nouvelles. C'est un peu moche :p mais ça fonctionne...
À par ça, niveau sécurité (session fixation et hijacking), est-ce bien mis en place avec les attributs (static) et la manière dont fonctionne la méthode check() ? Actuellement, uniquement Kankrelune et Coucou747 ont donné leur avis sur le sujet.
Tchô !
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 18 juin 2007 à 13:54
class session {
public function __get($var) {
return $_SESSION[$var];
}
public function __set($var, $val) {
$_SESSION[$var] = $val;
}
Fatal error: Objects used as arrays in post/pre increment/decrement must return values by reference in X on line X
Ou peut être, j'utilise mal l'interface o_O ?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 18 juin 2007 à 12:58
Ok pour
$session->test=array('test' => array('test' => array('test' => array('test'))));
Et si ENSUITE, plus tard, je veux ajouter encore un élément $ $_SESSION['test']['test'] par exemple ? En gardant les précédents ?
hametsu21
Messages postés37Date d'inscriptionmardi 1 novembre 2005StatutMembreDernière intervention24 février 2008 18 juin 2007 à 10:01
Tu entend par là, d'enregistrer dans la session un tableau à plusieurs dimensions ?
Je pensais que ArrayAccess ne supportait pas les tableaux multidimensionnelles après avoir lu quelques articles sur cette interface (exemple : http://blog.plumbr.com/3-implement-arrayaccess-vous-connaissez ). En réalité le problème a été fixé et il gère effectivement les tableaux, c'est donc un moyen assez performant en effet pour réécrire une classe de session :)
Ensuite, au niveau du fingerprint ? Comment aurais tu fais toi, Malalam ?
Naixn
Messages postés455Date d'inscriptionmardi 17 septembre 2002StatutMembreDernière intervention22 juillet 2007 18 juin 2007 à 09:50
Malalam > $session = new Session; $session->bla = array(1, 2); ? Non ?
Ou alors j'ai mal compris ta question...
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 18 juin 2007 à 09:28
Hello,
je trouve aussi que ta classe est légère. Une remarque tout bête : je fais comment, avec ta classe, une variable de session sous forme de tableau multidimensionnel ?
Je ne fais pas.
Clairement, de nos jours, pour réécrire une classe de session, il FAUT passer par la SPL et notamment arrayAccess.
webdeb
Messages postés488Date d'inscriptionsamedi 5 avril 2003StatutMembreDernière intervention31 mars 20094 17 juin 2007 à 22:07
Pourquoi ne pas vouloir utiliser $_SESSION ? Cette superglobale est faite pour ça, tout comme$_GET, $_POST, $_COOKIE, $_REQUEST, $_SERVER...
Ta classe ajoute une surcouche aux sessions qui n'est pas spécialement utile. Il vaut mieux utiliser directement les sessions. Leur mécanisme est si simple et efficace à mettre en oeuvre.
hametsu21
Messages postés37Date d'inscriptionmardi 1 novembre 2005StatutMembreDernière intervention24 février 2008 17 juin 2007 à 20:05
En faite, c'est après avoir lu cette article : http://phpsec.org/projects/guide/4.html que je me suis mis à ajouter le "fingerprint" dans ma class de session. Car rappelons-le, cette class n'a pas pour but d'enregistrer nos sessions dans une base de donnée ou tout autre mode d'enregistrement de donnée (texte, etc..) mais d'eviter de se servir directement dans nos scripts de la variable super global "$_SESSION" et ainsi, si par la suite, nous voulons coder différement, il suffira de modifier qu'un fichier...
Ensuite, le fingerprint est venu se greffer afin d'ajouter un plus en matière de sécurité !
> Krankrelune, il sert à rien de la façon que je l'enregistre et le compare, ou sert à rien tout court ?
> Coucou747, j'ai pas tout compris, pourrais-tu reformuler ta question s'il te plait ?
A+ ! ;)
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 17 juin 2007 à 19:00
le vol de sessions, c'est pas une faille courante... comment tu peux avoir le md5 de microtime du moment ou le gars que tu veux voler s'est connecte ?
hametsu21
Messages postés37Date d'inscriptionmardi 1 novembre 2005StatutMembreDernière intervention24 février 2008 17 juin 2007 à 18:30
ah bon ? et pourquoi cela ?
Si la variable enregistré dans la classe n'est pas égale à celle enregistré dans les sessions, cela signifie que la session a été détourné... donc une exception est levée et bloque l'accés. Je ne vois pas pourquoi ça ne "sert strictement à rien". Pourrais-tu plus développer afin que je comprenne mieux ton point de vue ?
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 17 juin 2007 à 12:45
Salut...
Tout d'abord ton "fingerprint" ne sert strictement à rien là... sinon...
amezghal
Messages postés385Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention21 août 20155 17 juin 2007 à 12:27
salut
-pour les tests de ce genre: if(isset($this->fingerprint) == false
il suffit d'utiliser:if(!isset($this->fingerprint))
-idem pour:if($x==true) il suffit:if($x)
-pour la géneration des nombres aléatoire utilise plutot la fonction mt_rand()( qui initialise le générateur automatiquement des php 4.2.0)
20 sept. 2012 à 11:37
juste pour information:
Applications web : sécuriser la session utilisateur =>
cyberzoide.developpez.com/securite/session ça date de 2006 mais c'est toujours bon à prendre.
Bonne journée à vous.
12 janv. 2011 à 11:48
25 juin 2007 à 20:52
$session = new Session();
$session['test'] = array('un', 'deux', 'trois');
$session['test'][] = 'quatre';
print_r($session['test']);
Ce qui me provoque une erreure...
Il faut donc manipuler les classes et rajouter certaines méthodes, mais c'est plutôt flou tout ça :p
25 juin 2007 à 18:20
25 juin 2007 à 16:37
25 juin 2007 à 15:13
<?php
$a = new RecursiveArrayIterator();
$a['test']['bla'] = 2;
echo $a['test']['bla'], '
';
echo gettype ($a['test']), '
';
echo gettype ($a), '
';
$a['tab'] = array (1,2,3);
$a['tab'][] = 4;
print_r ($a['tab']);
?>
Quelle version de PHP5 as-tu ?
25 juin 2007 à 14:33
$session = new Session();
$session['test'] = array('un', 'deux', 'trois');
$session['test'][] = 'quatre';
print_r($session['test']);
retourne toujours : Fatal error: Objects used as arrays in post/pre increment/decrement must return values by reference in /Users/quentinberlemont/Sites/session.php on line 83
25 juin 2007 à 12:42
25 juin 2007 à 12:22
<?php
$a = new RecursiveArrayIterator();
$a['test']['bla'] = 2;
echo $a['test']['bla'], '
';
echo gettype ($a['test']);
?>
22 juin 2007 à 16:59
21 juin 2007 à 09:00
19 juin 2007 à 12:26
19 juin 2007 à 10:02
19 juin 2007 à 09:32
sauf que, Fhx, ça ne marche pas ton code.
$session->mon_autre_tableau[10] est pris pour une variable, pas un tableau, via les setter. Fais un print_r dessus.
Il faut implémenter arrayAccess avec d'autres interfaces/classes, dont recursiveAIterator.
19 juin 2007 à 08:36
À par ça, niveau sécurité (session fixation et hijacking), est-ce bien mis en place avec les attributs (static) et la manière dont fonctionne la méthode check() ? Actuellement, uniquement Kankrelune et Coucou747 ont donné leur avis sur le sujet.
Tchô !
18 juin 2007 à 13:54
public function __get($var) {
return $_SESSION[$var];
}
public function __set($var, $val) {
$_SESSION[$var] = $val;
}
}
$session = new session;
$session->montableau[10][20][30] = array('x');
$session->mon_autre_tableau[10] = $session->montableau[10][20][30];
echo $session->mon_autre_tableau[10];
Où est le problème ?
18 juin 2007 à 13:48
Malalam, j'ai peut être dis une connerie :D
l'interface ArrayAcces ne permet pas de faire ce que tu dis, de même que la version précédente de ma classe de session.
exemple :
$session = new Session();
$session['test'] = array();
$session['test']['bidule'] = 'truc';
$session['test']['bidule']['machin'] = 'chouette';
print_r($session);
résultat :
Fatal error: Objects used as arrays in post/pre increment/decrement must return values by reference in X on line X
Ou peut être, j'utilise mal l'interface o_O ?
18 juin 2007 à 12:58
$session->test=array('test' => array('test' => array('test' => array('test'))));
Et si ENSUITE, plus tard, je veux ajouter encore un élément $ $_SESSION['test']['test'] par exemple ? En gardant les précédents ?
18 juin 2007 à 10:01
$session = new Session();
$session->test=array('test' => array('test' => array('test' => array('test'))));
print_r($session->test);
non ?
Je pensais que ArrayAccess ne supportait pas les tableaux multidimensionnelles après avoir lu quelques articles sur cette interface (exemple : http://blog.plumbr.com/3-implement-arrayaccess-vous-connaissez ). En réalité le problème a été fixé et il gère effectivement les tableaux, c'est donc un moyen assez performant en effet pour réécrire une classe de session :)
Ensuite, au niveau du fingerprint ? Comment aurais tu fais toi, Malalam ?
18 juin 2007 à 09:50
Ou alors j'ai mal compris ta question...
18 juin 2007 à 09:28
je trouve aussi que ta classe est légère. Une remarque tout bête : je fais comment, avec ta classe, une variable de session sous forme de tableau multidimensionnel ?
Je ne fais pas.
Clairement, de nos jours, pour réécrire une classe de session, il FAUT passer par la SPL et notamment arrayAccess.
17 juin 2007 à 22:07
Ta classe ajoute une surcouche aux sessions qui n'est pas spécialement utile. Il vaut mieux utiliser directement les sessions. Leur mécanisme est si simple et efficace à mettre en oeuvre.
17 juin 2007 à 20:05
Ensuite, le fingerprint est venu se greffer afin d'ajouter un plus en matière de sécurité !
> Krankrelune, il sert à rien de la façon que je l'enregistre et le compare, ou sert à rien tout court ?
> Coucou747, j'ai pas tout compris, pourrais-tu reformuler ta question s'il te plait ?
A+ ! ;)
17 juin 2007 à 19:00
17 juin 2007 à 18:30
Si la variable enregistré dans la classe n'est pas égale à celle enregistré dans les sessions, cela signifie que la session a été détourné... donc une exception est levée et bloque l'accés. Je ne vois pas pourquoi ça ne "sert strictement à rien". Pourrais-tu plus développer afin que je comprenne mieux ton point de vue ?
17 juin 2007 à 12:45
Tout d'abord ton "fingerprint" ne sert strictement à rien là... sinon...
http://fr2.php.net/manual/fr/function.session-set-save-handler.php
@ tchaOo°
17 juin 2007 à 12:27
-pour les tests de ce genre: if(isset($this->fingerprint) == false
il suffit d'utiliser:if(!isset($this->fingerprint))
-idem pour:if($x==true) il suffit:if($x)
-pour la géneration des nombres aléatoire utilise plutot la fonction mt_rand()( qui initialise le générateur automatiquement des php 4.2.0)