Bonjour,
j'étudie cet exemple de la FAQ
Je ne comprends pas ou plutôt ne vois pas l'intérêt du deuxieme if contenant ctype_digit ?
Merci de m'expliquer
Bonjour,
j'étudie cet exemple de la FAQ
Je ne comprends pas ou plutôt ne vois pas l'intérêt du deuxieme if contenant ctype_digit ?
Merci de m'expliquer
Si ça peut te rassurer, en effet il y a quelques incohérences dans ce script de la FAQ.
Sinon si c'est "pourquoi ctype_digit ?" :
Une donnée externe à un script (cookie, get/post, db, fichier) est toujours typée en String. Ce qui fait que si tu veux vérifier que tu as bien un entier, is_int() ne fonctionnera pas.
De même is_numeric() ne fait pas la différence entre un entier ou un décimal, il n'est donc pas fiable.
ctype_digit() est la fonction la plus adaptée pour déterminer qu'une chaine est bien constituée uniquement de chiffres, donc un entier.
Merci de ta réponse.
Oui, je connais ctype_digit mais dans le cas présent, j'aurais sauté ce bloc d'instructions ou alors commencé par quelque chose comme ca non ?
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 if( isset($_SESSION['id_aleatoire']) && ctype_digit($_SESSION['id_aleatoire']) && $_SESSION['id_aleatoire'] === $_COOKIE['id_aleatoire']) ....
C'est justement une des incohérences que j'ai relevé dans le script de la FAQ.
On commence par tester $_SESSION['id_aleatoire'] avec ctype_digit() et quelques lignes plus loin, on vérifie qu'il existe... C'est pas logique
Pour ton test :
- isset($_SESSION['id_aleatoire']), OK
Code : Sélectionner tout - Visualiser dans une fenêtre à part if( isset($_SESSION['id_aleatoire']) && ctype_digit($_SESSION['id_aleatoire']) && $_SESSION['id_aleatoire'] === $_COOKIE['id_aleatoire'])
C'est utile de vérifier que l'index existe.
- ctype_digit($_SESSION['id_aleatoire']) , KO !
Problème majeur. $_SESSION est un tableau sérialisé/désérialisé. Les variables qui sont passées en session gardent leur type (a contrario des variables GET/POST, etc. cf. mon post précédent). ctype_digit() n'accepte que des chaînes (j'avais pas fait gaffe à ça dans mon post précédent) et renverra false si tu lui passes un int.
- $_SESSION['id_aleatoire'] === $_COOKIE['id_aleatoire']), KO !
Le test strict ne peut pas fonctionner. $_SESSION['id_aleatoire'] est un int, $_COOKIE['id_aleatoire']) est un string.
Il faut se limiter au test ==
Accessoirement tu n'as pas testé que $_COOKIE['id_aleatoire']) existait.
À la limite on est pas obligé de rajouter un isset. On peut se contenter de
si $_COOKIE['id_aleatoire'] n'existe pas, l'expression équivaudra à $_SESSION['id_aleatoire'] == null, ce qui ne devrait jamais être le cas
Code : Sélectionner tout - Visualiser dans une fenêtre à part $_SESSION['id_aleatoire'] == @$_COOKIE['id_aleatoire']
(méfiance quand même, il est peut-être préférable que l'id_aléatoire ne puisse jamais être égal à 0, je suis pas sûr)
En espérant ne pas m'être embrouillé en cours d'explication...
HTH![]()
A priori c'est fiable comme méthode. A moins que ton navigateur refuse les cookies.
Sinon tu peux aussi passer ton jeton en GET, mais
1) c'est chiant à programmer
2) ça interdit l'utilisation des boutons back/forward du navigateur
Je sais pas trop ce qu'il en est avec les cookies concernant le n°2
Ok merci j'essaierai alors.
De toute manière ce sera toujours mieux que rien
Partager