J'ai un blocage avec l'utilisation des cookies en php.
Je m'explique, j'aimerais réaliser une redirection vers une autre page que la page de connexion basique si le visiteur a déjà des cookies mais dans ma manipulation aucune redirection ne se réalise.
Voici pour le code de la page de connexion :
<?php
session_start();
try
{
$bdd = new PDO('mysql:host=localhost;dbname=membres;charset=utf8', 'root', 'root');
}
catch (Exception $e)
{
die('Erreur : '.$e->getMessage());
}
include_once('cookieconnect.php');
if (isset($_POST['submitconnect']))
{
$pseudo = htmlspecialchars($_POST['pseudo']);
$pass = password_hash($_POST['pass'], PASSWORD_DEFAULT);
$req = $bdd->prepare('SELECT id, pass FROM membres WHERE pseudo = :pseudo');
$req->execute(array('pseudo' => $pseudo));
$resultat = $req->fetch();
// Comparaison du pass envoyé via le formulaire avec la base
$isPasswordCorrect = password_verify($_POST['pass'], $resultat['pass']);
if (!$resultat)
{
$erreur = 'Mauvais identifiant ou mot de passe !';
}
else
{
if ($isPasswordCorrect)
{
if (isset($_POST['connected']))
{
setcookie('pseudo',$pseudo, time()+365*24*3600,null,null,false,true);
setcookie('pass',$pass, time()+365*24*3600,null,null,false,true);
}
session_start();
$_SESSION['id'] = $resultat['id'];
$_SESSION['pseudo'] = $pseudo;
header("Location: profil.php?id=".$_SESSION['id']);
}
else {
$erreur = 'Mauvais identifiant ou mot de passe !';
}
}
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="theme-color" content="#45c945">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link href="connexion.css" rel="stylesheet" type="text/css">
<title>Titre</title>
<meta property="og:title" content="Page d'acceuil"/>
</head>
<div class="headerAcceuil">
<div class="paye">
<a href="test2.html">Titre</a>
</div>
</div>
<body>
<div class="content">
<div class="ici">
<ol class="chemin">
<li><span>Vous êtes ici:</span><a href="">Accueil</a></li>
<li><a href="connexion.php">Connexion</a></li>
</ol>
<span></span>
</div>
<h4 class="title-element">Connexion <a href="inscription.php" class="account">Pas de compte ? Ca part !</a></h4>
<div class="group">
<form method="post" action=""><center>
<label >PSEUDO</label>
<input type="text" name="pseudo" id="pseudo" required />
<br/>
<br/>
<label>MDP</label>
<input type="password" name="pass" id="pass" required />
<br/>
<br/>
<input type="checkbox" name="connected" id="connected">
<label for="connected" class="connect" >connexion automatique</label>
<br/>
<br/>
<input type="submit" name="submitconnect" value="Se connecter" id="submitconnect" class="button_submit"/>
<br/>
<br/>
<a class="mdpoublie" href="">Mot de passe oublié ?</a>
<br/>
<br/>
</center></form>
<a class="erreur"><center>
<?php
if (isset($erreur))
{
echo '<font color="red">'.$erreur."</font>";
}
?>
</center></a>
</div>
</div>
</body>
J'insere un
include_once('cookieconnect.php');
dans ce code :
<?php
if (!isset($_SESSION['id']) AND isset($_COOKIE['pseudo'], $_COOKIE['pass']) AND !empty($_COOKIE['pseudo']) AND !empty($_COOKIE['pass']))
{
$req = $bdd->prepare('SELECT id, pass FROM membres WHERE pseudo = :pseudo');
$req->execute(array('pseudo' => $_COOKIE['pseudo']));
$resultat = $req->fetch();
$isPasswordCorrect = password_verify($_COOKIE['pass'], $resultat['pass']);
if ($resultat)
{
if ($isPasswordCorrect)
{
$_SESSION['id'] = $resultat['id'];
$_SESSION['pseudo'] = $_COOKIE['pseudo'];
header("Location: profil.php?id=".$_SESSION['id']);
}
}
}
?>
Faut il que j'insère un Refresh dans la page de code initial?
La redirection fonctionne une fois connecté, mais le problème c'est que même une fois connecté, si je modifie mon url pour revenir sur cette pas de connexion aucune redirection ne se réalise.
Le plus simple à mon avis est de donner la priorité à la session : si elle existe, on se sert des variables de session (et la l'utilisation des variables de session est immédiatement disponible), sinon on regarde si il y a un cookie.
J'ai beau cherché, je ne trouve de solution à mon pb. La session permet bien la sauvegarde des données utiles pour la connexion mais qu'une seule fois. Par contre pour les cookies, ça ne fonctionne pas (ils sont bien créés mais je n'arrive pas à les utiliser).
je pense que tu devrais commencer par mettre au "clair" ce que tu souhaites faire. Je veux dire par là, le rédiger en français, en décomposant les différentes étapes.
Après avoir lu ton code, il y a pas mal d'erreurs de syntaxe/nom de variable/etc... mais surtout, des choses qui n'ont aucun sens. (Je parle de la partie PHP, pour ce qui est du HTML, rien que le fait de voir la balise center me force à te demander de relire le cours concernant cette partie).
Voilà, commence par faire cela, et on évoluera petit à petit pour que tu comprennes ce que tu fais, et puisses par la suite t'en sortir tout seul quand tu auras de nouveaux soucis. =)
PS : Comme te l'a signalé @philodick, active les erreurs PDO, va voir le lien de sa signature, ou relis le cours si besoin.
Merci pour les conseils, j'ai trouvé ce qu'il clochait avec les messages d'erreur PDO.
J'ai donc réussi à régler mon problème concernant la session. Et j'ai trouvé d'où vient mon problème avec les cookies, password_hash crypte différemment le mdp dans le cookie, password_verify ressort donc négatif.
Je cherche comment régler ce problème de façon sécurisée, si vous avez des idées, je suis preneur.
Connexion automatique et cookie
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.