Variable incorrectement incrémentée sous Chrome

Eléphant du PHP | 256 Messages

12 févr. 2011, 11:31

Bonjour,

Je voudrai limiter le nombre de fois où un formulaire a été complété pour des raisons de sécurité. Par exemple, au-delà de cinq réaffichages pour cause d'erreur, le visiteur est bloqué. :mrgreen:

Si j'utilise l'exemple de base de la documentation de Php, http://php.net/manual/fr/session.idpassing.php...
<?php
session_start();
if (empty($_SESSION['count'])) {
 $_SESSION['count'] = 1;
} else {
 $_SESSION['count']++;
}
?>
<p>Bonjour visiteur, vous avez vu cette page <?php echo $_SESSION['count']; ?> fois.</p>
... Google Chrome a un comportement aberrant. Parfois, il incrémente la valeur de 1 (normal !), mais d'autres fois de... 2 !

J'ajoute que la page ne comprend que cette instruction. :D

Qu'en pensez-vous ?

Merci pour votre aide.

Cordialement,

Gaspard

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 févr. 2011, 13:32

Ce ne serait pas juste un problème de cache qui fait que lorsque tu recharges la page, la session est bien mise à jour, mais l'affichage reste inchangé, et la fois d'après ton compteur se retrouve du coup à +2 ?

Parce que, que ce soit chrome, ie ou autre, il se contente d'afficher le résultat renvoyé par le serveur et ne change rien au traitement... donc à moins de l'appeler deux fois, il n'y a pas vraiment de raison que le problème se produise...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 256 Messages

12 févr. 2011, 13:50

Bonjour Ryle,

Moui, moui, je n'ai pas ta maîtrise de Php, mais je rejoins ton analyse. Mais, même en rafraichissant la page avec F5 pour éviter les effets inattendus de la souris je rencontre le problème. La variable s'incrémente en général de 2.

Mais, j'ai repris le traitement sur un site et une page vierge, et le bogue ne se reproduit pas.

Une instruction doit perturber le décompte sur ma page originale, mais je ne la trouve pas. En revanche, je me suis tourné vers une autre solution, qui fonctionne. :)

Donc, le problème peut être considéré comme résolu.

Merci !

Cordialement,

Gaspard

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 févr. 2011, 14:06

Le problème que tu rencontres dans ce cas est peut être du à une autre variable $count dans ton code. Si le paramètre register_globals est à ON dans ta config de php, le fait de modifier une variable qui a le même nom qu'une variable en session a pour effet de modifier celle qui se trouve dans la session.

En gros, avec un register global à on :
$_SESSION['count'] = 1;
$count = 2;
echo $_SESSION['count']; // va afficher 2
Peut être une piste à creuser ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 256 Messages

13 févr. 2011, 10:05

Merci encore Ryle.

Non, je ne vois pas de "mot clé" dans ma page, qui se rapproche de "count". Je ne vais pas poster ici les 600 lignes de ma page, d'autant qu'elle fonctionne.

Peut-être que le dysfonctionnement est dû à un effet de bord de JavaScript, vas savoir.

Encore merci.

Bien à toi,

Gaspard