Création de COOKIE
RésoluJe souhaiterai créer un cookie, mais malheureusement je ne sais pas trop où inclure mes scripts par rapport à mes pages.
Pouvez-vous essayer de m'aiguiller un peu s'ils vous plait.
En vous remerciant.
J'ai une page index.php
J'ai une page ou il y a mon formulaire, voici la case à cocher
<div name="SeSouvenir" id="SeSouvenir"> <fieldset class="fieldset_connexion"> <input type="checkbox"><span class="SeSouvenir">Se souvenir de moi</span> </fieldset> </div>
Et ma page de vérification
<?php
//on teste si le visiteur a soumis le formulaire
if (!empty($_POST)){
//on vérifie si le login et password ne sont pas vide, nulle ou non définie
if (!empty($_POST['login']) && (!empty($_POST['pass']))){
$login = Security::clean($_POST['login']);
$pass = Security::clean($_POST['pass']);
$pass = Security::hash($pass);
//on sélectionne les champs que l'on veut récupèrer et on teste les champs login et password
$sql = ('SELECT *
FROM tb_gestion
INNER JOIN (tb_adherent
INNER JOIN tb_adherent_gestion
ON tb_adherent.id_adherent = tb_adherent_gestion.rid_adherent)
ON tb_gestion.id_gestion = tb_adherent_gestion.rid_gestion
WHERE login=:login
AND pass=:pass') or die(print_r($bdd->errorInfo()));
$requete = $bdd->prepare($sql);
//on execute la requète en lui transmettant la liste des paramètres
$requete->execute(array(
':login' => $login,
':pass' => $pass
));
//on affiche les reponses de la requète dans un tableau
$donnees = $requete->fetch();
//si le password est différent on met un message d'erreur
if ($donnees['pass'] != $pass){
echo "<span class='erreur_connexion'>Mauvais mot de passe...ou Mauvais login...Merci de recommencer.</br> Peut-être n'êtes vous pas membre de la Clique ?</br>Dans ce cas désolé...</span>";
}else{
//on cré des variables accessibles depuis toutes les pages
$_SESSION['login'] = $login;
$_SESSION['id_adherent'] = $donnees['id_adherent'];
$_SESSION['nom'] = $donnees['nom'];
$_SESSION['prenom'] = $donnees['prenom'];
$_SESSION['adresse_mail'] = $donnees['adresse_mail'];
$_SESSION['demission'] = $donnees['demission'];
$_SESSION['nom_gestion'] = $donnees['nom_gestion'];
// Utiliser la redirection ---------------
redir("index.php?body=compte_profil&type=compte");
}
}else{
echo "<span class='erreur_connexion'>Veuillez remplir tous les champs !!!</span>";
}
}
?>
Merci de votre aide.
33 réponses
Plusieurs échanges portent sur l'implémentation d'un cookie « SeSouvenir » pour prolonger la session utilisateur et sur l'emplacement des scripts entre les pages de connexion, de formulaire et de vérification PHP. Des propositions recommandent de créer le cookie lorsque la case est cochée et de stocker l'identifiant dans le cookie ou la session, tout en soulignant des soucis comme l'incompatibilité navigateur. En cas de difficulté, les échanges évoquent la gestion des sessions, la suppression du cookie à la déconnexion et les risques de sécurité, avec des exemples de code sujet à erreurs. D'autres points signalent l'importance de tester le fonctionnement du cookie sur plusieurs navigateurs et de vérifier l'usage correct du nom et du contenu du cookie pour éviter les incohérences.
-
Merci beaucoup,
Très bien expliqué je devrais pouvoir me sortir de là.
A très bientôt je te tiens au courant.
merci -
Bonjour
if(isset($_COOKIE) && !isset($_SESSION))
C'est mal parti...
À partir du moment où tu as faitsession_start();
, la variable $_SESSION est définie et tu ne rentreras jamais dans le if. C'est très facile de s'en rendre compte en faisant unecho 'coucou';
immédiatement au début du 'if'. Il aurait mieux valu tester !isset($_SESSION['id_adherent']), et encore, je ne suis pas persuadé que ce soit utile.
De plus, je vois que tu détruis le cookie dans le else. Donc une fois que la session sera établie, tu passeras par le else et tu effaceras ton cookie ? Et à la prochaine connexion du visiteur, il n'y aura plus de connexion automatique.
Ensuite, le cookie que tu crées s'appelle 'clique', mais celui que tu testes s'appelle 'id_adherent'. Tu ne risques pas de le retrouver.
Ensuite$sql = ('SELECT * FROM tb_adherent WHERE id_adherent=:id_adherent') or die(print_r($bdd->errorInfo()));
Que vient faire ceor die(...
ici ? Il ne sera jamais exécuté.('SELECT *...est une chaîne de caractères non vide, sa valeur logique est donc toujours true et ce qui suit le 'or' ne sera jamais évalué.
Il faut mettre ce 'or...' après ton$bdd->prepare($sql);
car cette expression peut valoir true si tout va bien, et alors le "or die" est ignoré, ou false s'il y a un problème dans la requête, auquel cas le "or die" va être pris en compte.
Ceci étant dit, si tu n'as pas d'erreur dans ta requête, ce point n'empêche pas ton script de marcher.
Enfin, quand tout ira bien et que tu auras bien vérifier la présence du bon cookie, il te restera à faire la même chose que lors d'une connexion par formulaire : tous tes$_SESSION['machin']=$truc;
puis tonredir("index.php?body=compte_profil&type=compte");. -
Bonjour
Je suis perdu je ne comprend vraiment pas pourquoi que ça ne fonctionne pas, je m'arrache le peu de cheveux que j'ai.
Après avoir créé les variables de SESSION, dans ma page de vérif, j'ai défini la variable setcookie et vérifié si la case à bien été cocher.if(isset($_POST['remember'])){ setcookie('clique', $donnees['id_adherent'] . sha1($donnees['login'] . $donnees['pass'] . $_SERVER['REMOTE_ADDR']), time() + 3600 * 24 * 3, '/' }
Dans ma page index.php j'ai fait les vérif d'usage je ne vois pas où j'ai oublié quelque chose.
Si vous pouvez m'en dire un peu plu s'ils vous plait
Merci beaucoup<?php session_start();?> <?php if(isset($_COOKIE) && !isset($_SESSION)){ $cookieid= intval($_COOKIE["id_adherent"]); # requete pour voir si l'id existe ! $sql = ('SELECT * FROM tb_adherent WHERE id_adherent=:id_adherent') or die(print_r($bdd->errorInfo())); $requete = $bdd->prepare($sql); //on execute la requète en lui transmettant la liste des paramètres $requete->execute(array( ':id_adherent' => $cookieid )); $result = $requete->rowCount(); if($result > 0) { setcookie('clique', $donnees['id_adherent'] . sha1($donnees['login'] . $donnees['pass'] . $_SERVER['REMOTE_ADDR']), time() + 3600 * 24 * 3, '/', 'localhost', false, true); }else{ setcookie('clique', '', time() - 3600, '/', 'localhost', false, true); } } ?> <?php include('connexion/connexion_bdd.php');?> <?php include('fonction/fonction.php');?> -
Bonjour
mais pourquoi en ayant un COOKIE sur mon PC je suis obligé de me reconnecter
Le cookie par lui-même ne te reconnecte pas.
Il faut que dans ta vérification, s'il n'y a pas de formulaire ($_POST['login'] et $_POST['pass'] vides), tu testes les cookies et, s'ils sont là, tu refais la connexion comme si tu venais de recevoir le formulaire. -
non je peux toujours pas ^^
-
Bonjour
Excuse moi je suis toujours avec mes COOKIES que je n'arrive pas à faire fonctionner il faut à chaque fois que je me reconnecte malgrès les COOKIE de créé.
As tu pu télécharger via mon lien.
Encore merci -
Bonjour
Regarde avec ce lien si tu peux sinon comment je pourrai te l'envoyer?
https://www.cjoint.com/c/DHpbqJxRs7F -
va faloir me le donner autrement , je ne peux pas le télécharger ^^'
-
Bonjour
Je te joint le fichier index.php, le fichier de mon formulaire et le fichier de vérification.
9a concerne ses 3 fichiers en fait.
En attendant je te remercie sincérement.
https://www.cjoint.com/?DHno373N0wd -
tu peux m'envoyer ton fichier qui fonctionne :)
-
Bonjour
oui je comprends ça mais pourquoi en ayant un COOKIE sur mon PC je suis obligé de me reconnecter?
Le COOKIE dure 3 jours dans mon exemplesetcookie('clique', $donnees['id_adherent'] . sha1($donnees['login'] . $donnees['pass'] . $_SERVER['REMOTE_ADDR']), time() + 3600 * 24 * 3, '/', 'localhost', false, true);
Merci -
normale , un cookie dure le temps indiqué , et non pas le temps d'un onglet ou d'un naviguateur sinon ca reviens à faire une variables ;)
-
Bonjour
oui il s'affiche bien j'ai fait<h4>contenu du cookie</h4> <?php var_dump($_COOKIE);?>
Lorsque je clique sur se déconnecter ça supprime le COOKIE donc ça c'est bon, mais si je ferme simplement mon navigateur je suis obligé de me reconnecter mais le COOKIE est toujours présent.
Bizarre!! -
c'est bizarre , j'ai réessayer et tous fonctionne , tu es sure que ton navigateur accepte les cookies ? :s
-
Bonjour,
Je reviens vers toi car malgrès un COOKIE de créé, lorsque je réouvre mon navigateur je suis obligé de me reconnecter.
Peux tu encore m'aider s'il te plait, je ne vois pas ce qu'il faut faire.
Je te remercie -
Bonjour
Si tu as un peu de temps pour me donner ton avis sur mes fichiers, je suis sur la bonne voie je pense, mais encore quelques problème à résoudre pour que je puise passer à la suite.
Je te remercie -
Bonjour,
Alors voilà où j'en suis...
Lorsque je coche la case se souvenir de moi alors je cré un cookie
Lorsque je clic sur déconnecté je supprime le cookie et la SESSION se ferme bien sur
Mais lorsque le COOKIE est créé en fermant le navigateur le COOKIE est toujours présent mais je suis quand même obligé de me reconnecté.
As tu une idéé s'il te plait je te joint ce que j'ai mis en place.
Merci
mon fichier index.php<?php session_start();?> <?php //Si le COOKIE existe et une SESSION n'existe pas if(isset($_COOKIE) && !isset($_SESSION)){ $cookieid= intval($_COOKIE["id_adherent"]); //requete pour voir si l'id existe $sql = ('SELECT * FROM tb_adherent WHERE id_adherent=:id_adherent') or die(print_r($bdd->errorInfo())); $requete = $bdd->prepare($sql); //on execute la requète en lui transmettant la liste des paramètres $requete->execute(array(':id_adherent' => $cookieid)); $result = $requete->rowCount(); if($result > 0){ setcookie('clique', $donnees['id_adherent'] . sha1($donnees['login'] . $donnees['pass'] . $_SERVER['REMOTE_ADDR']), time() + 3600 * 24 * 3, '/', 'localhost', false, true); } else{ setcookie('clique', '', time() - 3600, '/', 'localhost', false, true); } } ?>
mon fichier de vérification<?php //on teste si le visiteur a soumis le formulaire if (!empty($_POST)){ //on vérifie si le login et password ne sont pas vide, nulle ou non définie if (!empty($_POST['login']) && (!empty($_POST['pass']))){ $login = Security::clean($_POST['login']); $pass = Security::clean($_POST['pass']); $pass = Security::hash($pass); //on sélectionne les champs que l'on veut récupèrer et on teste les champs login et password $sql = ('SELECT * FROM tb_gestion INNER JOIN (tb_adherent INNER JOIN tb_adherent_gestion ON tb_adherent.id_adherent = tb_adherent_gestion.rid_adherent) ON tb_gestion.id_gestion = tb_adherent_gestion.rid_gestion WHERE login=:login AND pass=:pass') or die(print_r($bdd->errorInfo())); $requete = $bdd->prepare($sql); //on execute la requète en lui transmettant la liste des paramètres $requete->execute(array( ':login' => $login, ':pass' => $pass )); //on affiche les reponses de la requète dans un tableau $donnees = $requete->fetch(); //si le password est différent on met un message d'erreur if ($donnees['pass'] != $pass){ echo "<span class='erreur_connexion'>Mauvais mot de passe...ou Mauvais login...Merci de recommencer.</br> Peut-être n'êtes vous pas membre de la Clique ?</br>Dans ce cas désolé...</span>"; } else{ //on cré des variables accessibles depuis toutes les pages $_SESSION['login'] = $login; $_SESSION['id_adherent'] = $donnees['id_adherent']; $_SESSION['nom'] = $donnees['nom']; $_SESSION['prenom'] = $donnees['prenom']; $_SESSION['adresse_mail'] = $donnees['adresse_mail']; $_SESSION['demission'] = $donnees['demission']; $_SESSION['nom_gestion'] = $donnees['nom_gestion']; //Si la case "remember" a été coché on défini la variable "setcookie" //Premier paramètre le nom du COOKIE //2 - id de l'utilisateur //3,4,5 - le login, le mot de pass, l'adresse ip crypter //6 - La durée du COOKIE //7 - Le chemin accessible du COOKIE //8 - Le nom du domaine if(isset($_POST['remember'])){ setcookie('clique', $donnees['id_adherent'] . sha1($donnees['login'] . $donnees['pass'] . $_SERVER['REMOTE_ADDR']), time() + 3600 * 24 * 3, '/', 'localhost', false, true); } // Utiliser la redirection --------------- redir("index.php?body=compte_profil&type=compte"); } } else{ echo "<span class='erreur_connexion'>Veuillez remplir tous les champs !!!</span>"; } } ?> -
le cookies de création doit se être placé lors de la création de la session.
ensuite le cookie qui va être utilisé ne doit pas être mis dans une page qui doit être exécuter par validation dans un champs submit , le cookie doit être appeler dans une page qui appelé partout , par exemple :
ta page config.php ;)
-
Bonjour
Je reviens vers toi car malheureusement je n'arrive pas à créer un COOKIE.
dans ma page connexion_verif.php
on test si le visiteur a soumis le formulaire
on vérif le login et le pass
requète pour sélectionner les champs et on teste login et pass
on éxecute la requète
on affiche la réponse' dans un tableau
on affiche les messages d'erreur
sinon on cré les variables de SESSION
En fait j'ai tourné ça dans tous les sens, je ne sais pas à quel moment je doit créer un COOKIE.
Peux tu encore m'aider s'il te plait.
J'ai adapté ce code ci-dessous mais ça me génère une erreur.
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in ........
Merci encore$usr = trim(mysql_real_escape_string($_POST['login'])); $pwd =trim(mysql_real_escape_string(md5($_POST['pass']))); if($usr && $pwd){ $bdd = mysql_query("SELECT * FROM tb_adherent WHERE login = '".$usr."' AND pass= '".$pwd."' "); if(mysql_num_rows($bdd) > 0){//on verifie si le pseudo et le mot de passe sont correctes. $donnees=mysql_fetch_assoc($bdd); $m_id = $donnees['id_adherent']; $m_username = $donnees['login']; $m_password = $donnees['pass']; $mnt=time(); if($_POST["SeSouvenir"]=="SeSouvenir"){//on vérifie si on veut garder la session active(se souvenir de moi). $temp_cookie=time()+3600*24*30;// la durée du cookie, 3600*24*30 en secondes=30jours. // on crée les cookies setcookie("id_adherent",$_SESSION['id_adherent'],$temp_cookie); setcookie("prenom",$_SESSION['prenom'],$temp_cookie); } // on crée les sessions $_SESSION['id_adherent'] = $m_id; $_SESSION['prenom'] = $m_username; echo "Vous êtes connecté ".$m_username."."; echo '';//rediriger le membre connecté vers la page d'accueil }else{ //si les informations entrées ne sont pas correcte echo"Le nom d'utilisateur ou le mot de passe est incorrecte."; } }else{ // si on a laissé un champ vide echo"Veuillez entrer un nom d'utilisateur est un mot de passe"; } -
Tu ajoutes ca dans une page qui est souvent requise ;)
<?php if(isset($_COOKIE) && !isset($_SESSION)) { $cookieid= intval($_COOKIE["id_adherent"]); # requete pour voir si l'id existe ! $sql = ('SELECT * FROM tb_gestion INNER JOIN (tb_adherent INNER JOIN tb_adherent_gestion ON tb_adherent.id_adherent = tb_adherent_gestion.rid_adherent) ON tb_gestion.id_gestion = tb_adherent_gestion.rid_gestion WHERE id_adherent=:id_adherent') or die(print_r($bdd->errorInfo())); $requete = $bdd->prepare($sql); //on execute la requète en lui transmettant la liste des paramètres $requete->execute(array( ':id_adherent' => $cookieid )); $result = $requete->rowCount(); if($result > 0) { $donnees = $requete->fetch(); $_SESSION['id_adherent'] = $donnees['id_adherent']; $_SESSION['nom'] = $donnees['nom']; $_SESSION['prenom'] = $donnees['prenom']; $_SESSION['adresse_mail'] = $donnees['adresse_mail']; $_SESSION['demission'] = $donnees['demission']; $_SESSION['nom_gestion'] = $donnees['nom_gestion']; } $donnees->closeCursor(); }
- 1
- 2