Problème de déconnexion cookies php

Jean26843326 Messages postés 112 Date d'inscription jeudi 3 août 2023 Statut Membre Dernière intervention 2 avril 2024 - 28 nov. 2023 à 19:16
yg_be Messages postés 22840 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024 - 3 déc. 2023 à 10:49

bonjour, j'ai un problème avec mes cookies de mon site car je voudrait les supprimer mais sa marche pas. Vous pourrais mieux comprendre avec les code suivant:

  1. pour se déconnecter et supprimer les cookies mais marche pas:
<?php
// Démarrer la session
session_start();

// Supprimer la variable de session
unset($_SESSION["nom_utilisateur"]);

// Supprimer le cookie de connexion
setcookie("nom_utilisateur", "", time() - 3600, "/"); // Expire le cookie

// Rediriger l'utilisateur vers la page de connexion
header("Location: page_connexion.php");
exit();
?>
  • pour l'inscription:
<?php
// Vérifier si le formulaire d'inscription a été soumis
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Récupérer les données du formulaire
    $nom = $_POST["nom"];
    $email = $_POST["email"];
    $mot_de_passe = password_hash($_POST["mot_de_passe"], PASSWORD_DEFAULT);

    // Enregistrer l'utilisateur dans un fichier (exemple : utilisateurs.json)
    $utilisateurs = json_decode(file_get_contents('utilisateurs.json'), true);

    // Vérifier si le nom d'utilisateur est déjà pris
    foreach ($utilisateurs as $utilisateur) {
        if ($utilisateur['nom'] == $nom) {
            echo "Le nom d'utilisateur est déjà pris.";
            exit();
        }
    }

    // Vérifier si l'utilisateur existe déjà avec cet e-mail
    foreach ($utilisateurs as $utilisateur) {
        if ($utilisateur['email'] == $email) {
            echo "L'utilisateur avec cet e-mail existe déjà.";
            exit();
        }
    }

    // Ajouter le nouvel utilisateur
    $nouvel_utilisateur = [
        'nom' => $nom,
        'email' => $email,
        'mot_de_passe' => $mot_de_passe,
    ];

    // Ajouter l'utilisateur au tableau
    $utilisateurs[] = $nouvel_utilisateur;

    // Enregistrer dans le fichier
    file_put_contents('utilisateurs.json', json_encode($utilisateurs, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));

    echo "Inscription réussie.";
}
?>

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Inscription</title>
</head>
<body>
    <h1>Inscription</h1>
    <form method="post" action="">
        <label for="nom">Nom d'utilisateur:</label>
        <input type="text" name="nom" required><br>

        <label for="email">E-mail:</label>
        <input type="email" name="email" required><br>

        <label for="mot_de_passe">Mot de passe:</label>
        <input type="password" name="mot_de_passe" required><br>

        <button type="submit">S'inscrire</button>
    </form>
</body>
</html>
  • pour la page d'accueil temporaire: 
<?php
session_start();

// Vérifier si l'utilisateur est connecté
if (!isset($_SESSION["nom_utilisateur"])) {
    // Rediriger l'utilisateur vers la page de connexion s'il n'est pas connecté
    header("Location: page_connexion.php");
    exit();
}

// Récupérer le nom d'utilisateur depuis la session
$nom_utilisateur = $_SESSION["nom_utilisateur"];
?>

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Menu</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            text-align: center;
            margin: 0;
            padding: 0;
            background-color: #f0f0f0;
        }

        .container {
            max-width: 400px;
            margin: 100px auto;
            padding: 20px;
            background-color: #fff;
            box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
        }

        h1 {
            font-size: 24px;
            margin-bottom: 20px;
        }

        .welcome-message {
            margin-bottom: 20px;
        }

        .menu-item {
            background-color: #3498db;
            color: #ffffff;
            padding: 12px 24px;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            margin: 10px;
            font-size: 18px;
            transition: background-color 0.3s ease, transform 0.2s ease;
            text-decoration: none;
            display: inline-block;
        }

        .menu-item:hover {
            background-color: #2980b9;
            transform: scale(1.05);
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>Menu</h1>
        <p class="welcome-message">Bienvenue, <?php echo $nom_utilisateur; ?>!</p>
        <div>
            <a class="menu-item" href="lien_page_1.php">Page 1</a>
            <a class="menu-item" href="lien_page_2.php">Page 2</a>
            <a class="menu-item" href="deconnexion.php">Déconnexion</a>
        </div>
    </div>
</body>
</html>
  • et la page de connexion: 
<?php
session_start();

// Vérifier si un cookie de connexion existe
if (isset($_COOKIE["nom_utilisateur"])) {
    // Utiliser les informations du cookie pour établir la session
    $_SESSION["nom_utilisateur"] = $_COOKIE["nom_utilisateur"];

    // Rediriger l'utilisateur vers la page d'accueil
    header("Location: page_accueil.php");
    exit();
}

// Vérifier si le formulaire de connexion a été soumis
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Récupérer les données du formulaire
    $identifiant = $_POST["identifiant"]; // Peut être le nom d'utilisateur ou l'adresse e-mail
    $mot_de_passe_fourni = $_POST["mot_de_passe"];

    // Charger les utilisateurs depuis le fichier JSON
    $utilisateurs = json_decode(file_get_contents('utilisateurs.json'), true);

    // Vérifier l'existence de l'utilisateur
    $utilisateur_trouve = false;
    foreach ($utilisateurs as $utilisateur) {
        if (($utilisateur['email'] == $identifiant || $utilisateur['nom'] == $identifiant) &&
            password_verify($mot_de_passe_fourni, $utilisateur['mot_de_passe'])) {
            // Définir la session avec le nom d'utilisateur
            $_SESSION["nom_utilisateur"] = $utilisateur['nom'];

            // Définir un cookie de connexion
            setcookie("nom_utilisateur", $utilisateur['nom'], time() + 3600 * 24 * 30); // Expire dans 30 jours

            // Rediriger l'utilisateur vers la page d'accueil
            header("Location: page_accueil.php");
            exit();
        }
    }

    // Afficher un message d'erreur si l'authentification échoue
    echo "Identifiants invalides. Veuillez réessayer.";
}
?>

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Connexion</title>
</head>
<body>
    <h1>Connexion</h1>
    <form method="post" action="">
        <label for="identifiant">Nom d'utilisateur ou E-mail:</label>
        <input type="text" name="identifiant" required><br>

        <label for="mot_de_passe">Mot de passe:</label>
        <input type="password" name="mot_de_passe" required><br>

        <button type="submit">Se connecter</button>
    </form>
</body>
</html>

Merci de votre aide.

A voir également:

3 réponses

liliinfo06 Messages postés 28 Date d'inscription vendredi 15 avril 2022 Statut Membre Dernière intervention 6 février 2024 2
28 nov. 2023 à 19:33

Bonjour,

Procédure sur chrome afin de supprimer les cookies:

  1. Sur votre ordinateur, ouvrez Chrome.
  2. En haut à droite, cliquez sur Plus .
  3. Cliquez sur Plus d'outils. Effacer les données de navigation.
  4. En haut de la page, choisissez une période. ...
  5. Cochez les cases face à "Cookies et données de site" et "Images et fichiers en cache".
  6. Cliquez sur Effacer les données
0
Jean26843326 Messages postés 112 Date d'inscription jeudi 3 août 2023 Statut Membre Dernière intervention 2 avril 2024 1
28 nov. 2023 à 19:48

non depuis le php et es que  j'utilise plutôt MYsql

0
Jean26843326 Messages postés 112 Date d'inscription jeudi 3 août 2023 Statut Membre Dernière intervention 2 avril 2024 1
28 nov. 2023 à 19:47

PS: es que j'utilise MYsql ?

0
yg_be Messages postés 22840 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024 1 473
28 nov. 2023 à 19:57

bonjour,

Je ne vois pas l'avantage de supprimer les cookies.  Tu ne peux de toutes façons pas faire confiance à ce que fait le navigateur.

Il me semble amplement suffisant de supprimer les variables de sessions.  Une fois que tu as fait cela, les cookies n'ont plus aucune valeur.

0
Jean26843326 Messages postés 112 Date d'inscription jeudi 3 août 2023 Statut Membre Dernière intervention 2 avril 2024 1
29 nov. 2023 à 13:13

comment supprimer le cookies de l'utilisateur ? 

0
yg_be Messages postés 22840 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024 1 473 > Jean26843326 Messages postés 112 Date d'inscription jeudi 3 août 2023 Statut Membre Dernière intervention 2 avril 2024
29 nov. 2023 à 14:34

Il n'est pas utile de supprimer les cookies de l'utilisateur. De toutes façons, tu ne peux jamais être certain que l'utilisateur a vraiment supprimé ces cookies.

Il est amplement suffisant de supprimer les variables de session, cela retire toute valeur aux cookies de l'utilisateur.

0
Jean26843326 Messages postés 112 Date d'inscription jeudi 3 août 2023 Statut Membre Dernière intervention 2 avril 2024 1 > yg_be Messages postés 22840 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024
30 nov. 2023 à 12:34

et comment faire parce que Jai un chat mais je veux quille vérifié  si la personne existe toujours parce que même une fois connecter est quand  je le supprime sons compte sa le déconnecte pas et il peut toujours commenter   

<?php
session_start();

// Vérifier si l'utilisateur est connecté
if (!isset($_SESSION['nom_utilisateur'])) {
    echo "Vous devez être connecté pour envoyer un message.";
    exit();
}

$message = $_POST['message'] ?? '';
$ip = $_SERVER['REMOTE_ADDR']; // Récupère l'adresse IP du client

if ($message !== '') {
    $timestamp1 = date('H:i:s');
    $timestamp2 = date('Y-m-d H:i:s');
    $utilisateur_connecte = $_SESSION['nom_utilisateur'];
    
    // Format pour discussions1.txt (sans l'adresse IP)
    $message1 = "$timestamp1 - $utilisateur_connecte - " . htmlspecialchars($message) . "\n";
    
    // Format pour discussions2.txt (avec l'adresse IP)
    $message2 = "$timestamp2 - $ip - $utilisateur_connecte - " . htmlspecialchars($message) . "\n";
    
    // Enregistrement dans discussions1.txt
    file_put_contents('discussions1.txt', $message1, FILE_APPEND | LOCK_EX);
    
    // Enregistrement dans discussions2.txt
    file_put_contents('discussions2.txt', $message2, FILE_APPEND | LOCK_EX);
}
?>

 code pour te retrouver 

<?php
session_start();
session_set_cookie_params(0);

// Vérifier si un cookie de connexion existe
if (isset($_COOKIE["nom_utilisateur"])) {
    // Utiliser les informations du cookie pour établir la session
    $_SESSION["nom_utilisateur"] = $_COOKIE["nom_utilisateur"];

    // Rediriger l'utilisateur vers la page d'accueil
    header("Location: accueil.php");
    exit();
}

// Vérifier si le formulaire de connexion a été soumis
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Récupérer les données du formulaire
    $identifiant = $_POST["identifiant"]; // Peut être le nom d'utilisateur ou l'adresse e-mail
    $mot_de_passe_fourni = $_POST["mot_de_passe"];

    // Charger les utilisateurs depuis le fichier JSON
    $utilisateurs = json_decode(file_get_contents('../fichier/secure-5255124825/Compte/utilisateurs.json'), true);

    // Vérifier l'existence de l'utilisateur
    $utilisateur_trouve = false;
    foreach ($utilisateurs as $utilisateur) {
        if (($utilisateur['email'] == $identifiant || $utilisateur['nom'] == $identifiant) &&
            password_verify($mot_de_passe_fourni, $utilisateur['mot_de_passe'])) {
            // Définir la session avec le nom d'utilisateur
            $_SESSION["nom_utilisateur"] = $utilisateur['nom'];

            // Définir un cookie de connexion
            setcookie("nom_utilisateur", $utilisateur['nom'], time() + 3600 * 24 * 30); // Expire dans 30 jours

            // Rediriger l'utilisateur vers la page d'accueil
            header("Location: accueil.php");
            exit();
        }
    }

    // Afficher un message d'erreur si l'authentification échoue
    echo "Identifiants invalides. Veuillez réessayer.";
}
?>

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Connexion</title>
</head>
<body>
    <h1>Connexion</h1>
    <form method="post" action="">
        <label for="identifiant">Nom d'utilisateur ou E-mail:</label>
        <input type="text" name="identifiant" required><br>

        <label for="mot_de_passe">Mot de passe:</label>
        <input type="password" name="mot_de_passe" required><br>

        <button type="submit">Se connecter</button>

        <!-- Ajout du bouton d'inscription avec le lien -->
        <button type="button" onclick="window.location.href='http://compte/inscription.php'">Inscription</button>
    </form>
</body>
</html>

0
yg_be Messages postés 22840 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024 1 473 > Jean26843326 Messages postés 112 Date d'inscription jeudi 3 août 2023 Statut Membre Dernière intervention 2 avril 2024
30 nov. 2023 à 12:46

C'est une erreur de faire ceci:

$_SESSION["nom_utilisateur"] = $_COOKIE["nom_utilisateur"]

Cela permet facilement à l'utilisateur de tricher en envoyant un cookie.

0
Jean26843326 Messages postés 112 Date d'inscription jeudi 3 août 2023 Statut Membre Dernière intervention 2 avril 2024 1 > yg_be Messages postés 22840 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024
30 nov. 2023 à 13:01

merci mais tu veut dire quoi par l'utilisateur de tricher en envoyant un cookie.

et non sa marche pas il peut plus commanter parce que le cookies sur la page marche pas je veut que le php verifie si le compte existe toujours                                              

<?php
session_start();

// Vérifier si l'utilisateur est connecté
if (!isset($$_SESSION["nom_utilisateur"] = $_COOKIE["nom_utilisateur"])) {
    echo "Vous devez être connecté pour envoyer un message.";
    exit();
}

$message = $_POST['message'] ?? '';
$ip = $_SERVER['REMOTE_ADDR']; // Récupère l'adresse IP du client

if ($message !== '') {
    $timestamp1 = date('H:i:s');
    $timestamp2 = date('Y-m-d H:i:s');
    $utilisateur_connecte = $_SESSION['nom_utilisateur'];
    
    // Format pour discussions1.txt (sans l'adresse IP)
    $message1 = "$timestamp1 - $utilisateur_connecte - " . htmlspecialchars($message) . "\n";
    
    // Format pour discussions2.txt (avec l'adresse IP)
    $message2 = "$timestamp2 - $ip - $utilisateur_connecte - " . htmlspecialchars($message) . "\n";
    
    // Enregistrement dans discussions1.txt
    file_put_contents('discussions1.txt', $message1, FILE_APPEND | LOCK_EX);
    
    // Enregistrement dans discussions2.txt
    file_put_contents('discussions2.txt', $message2, FILE_APPEND | LOCK_EX);
}
?>
0