[FORM] image de sécurité & SESSION
Bonjour,
Je fais appel à vous concernant un soucis sur formulaire. J'ai utilisé un script de protection qui génère une image et permet d'éviter les spam de venir "pourrir" la boîte e-mail de l'amicale pour laquelle je travail.
Je l'avais utilisé sur l'ancienne version du site et cela fonctionnait bien.
code du script d'image de sécurité :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
/************************* PRTOECTION ***********************************/
// on démarre une session pour pouvoir mémoriser le code
session_start();
// on définit les caractères utilisés pour le code généré
$liste = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// génére le code en piochant dans les caractères de la liste
$code = '';
while(strlen($code) != 6) {
$code .= $liste[rand(0,36)];
}
// on mémorise le code de 6 caractères généré en session
$_SESSION['code']=$code;
// on créé une image de 70 x 20 pixels (larg x hauteur)
$img = imageCreate(70, 20) or die ("Problème de création GD");
// Choix de la couleur de fond, ici ça donne du Gris ( RVB)
$background_color = imagecolorallocate ($img, 238, 238, 238);
// Choix de la couleur de la police, ici du noir
$ecriture_color = imagecolorallocate ($img, 0, 0, 0);
// le code la police utilisée
$code_police=5;
// on créé une image jpeg en empêchant la mise en cache
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header("Content-type: image/jpeg");
// on introduit le code dans l'image
imageString($img, $code_police,(70-imageFontWidth($code_police) * strlen("".$code.""))/2,0, $code,$ecriture_color);
// on créé une image avec une qualité médiocre de 30%
// pour éviter qu'un robot puisse la lire
imagejpeg($img,'',30);
// on libère la mémoire
imageDestroy($img); |
Ce script est cencé mettre en Session, la variable 'code'
Hors, lorsque la page du formulaire de contact s'affiche, le code généré est différent du contenu de la variable dans $_SESSION. Un simple echo me l'a montré...
http://pompier-lemans.com/screen_contact.jpg
De plus, après validation du formulaire, la variable de session semble vide dans mon script d'envoi du mail.
J'ai remarqué un autre point, lors d'un rafraichissement, [F5], la nouvelle variable de session, contient le code de l'image d'avant. :? bizarre non ?
En terme de fonctionnement :
Une page qui contient le formulaire.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
<div id="contactForm">
<div class="loader"></div>
<div class="bar"></div>
<form action="mail.php" class="contactForm" id="contactForm" name="cform" method="post">
<h1>Contactez Nous</h1>
<label>Votre message nous sera transmis et nous vous répondrons dans les meilleurs délais.</label>
<label class="grey" for="name">Nom:<span class="name-missing">Veuillez indiquer votre nom</span></label>
<input class="field" type="text" name="name" id="name" value="" size="23" />
<label class="grey" for="e-mail">Email:<span class="email-missing">E-mail valide requis</span></label>
<input class="field" type="text" name="email" id="e-mail" size="23" />
<label class="grey" for="message">Message:<span class="message-missing">Votre message est vide...</span></label>
<textarea class="field" rows="" cols="" id="message" name="message"></textarea>
<label for="verif">Recopiez le code suivant <img valign="bottom" src="imagesecu.php" alt="image de protection" /></label>
<input class="field" type="text" name="verif" id="verif" value="" maxlength="6" />
<input type="submit" name="submit" value="Envoyer" class="bt_register"/>
<? echo ">>>>>>>>>> ".$_SESSION['code'] ; ?>
</form> <!-- form : contactez nous -->
<script src="js/scripts_contact.js" type="text/javascript" charset="iso-8859-1"></script>
</div> <!-- contact form --> |
Un script JS qui test les champs.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
// script de validation du message
$('.contactForm').submit( function(){
//statements to validate the form
var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
var email = document.getElementById('e-mail');
if (!filter.test(email.value)) {
$('.email-missing').show();
} else {$('.email-missing').hide();}
if (document.cform.name.value == "") {
$('.name-missing').show();
} else {$('.name-missing').hide();}
if (document.cform.message.value == "") {
$('.message-missing').show();
} else {$('.message-missing').hide();}
if ((document.cform.name.value == "") || (!filter.test(email.value)) || (document.cform.message.value == "")) {
return false;
}
if ((document.cform.name.value != "") && (filter.test(email.value)) && (document.cform.message.value != "")) {
// on cache le formulaire
$('.contactForm').hide();
// on montre la barre de chargement
$('.loader').append($('.bar'));
$('.bar').css({display:'block'});
// envoi des requêtes ajax
$.post('mail.php',{name:$('#name').val(),
email:$('#e-mail').val(),
message:$('#message').val(),
verif:$('#verif').val()},
// renvoi des données
function(data){
// cache la barre de chargement
$('.bar').css({display:'none'});
$('.loader').append(data);
});
//Attente de 6s, fermeture du formulaire et fade out
setTimeout('$(".loader").slideUp("slow")', 6000);
// on montre le formulaire
$('.contactForm').show();
// on vide le formulaire
$('.contactForm')[0].reset();
// on le fait rester sur la page après envoi
return false;
}
}); |
Si valide il envoi sur la page d'envoi de mail.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
include("datefr.php");
if(!isset($_SESSION['code']) || strlen($_SESSION['code']) != 6)
{
echo ">> ".$_SESSION['code']." - ".$_POST['verif']." <<" ;
// pour les tests la session renvoi vide, vérif renvoi bien son contenu
exit();
}
if($_SESSION['code'] != $_POST['verif'])
{
...
}
else
{
...
} |
Quelqu'un aurait il une idée du pourquoi la session renvoi un mauvais contenu et aussi pourquoi elle se trouve vide après passage sur l'autre script ? :roll: 8O