[RESOLU] Problème suppression session et cookie

Eléphant du PHP | 385 Messages

28 oct. 2016, 16:16

Bonjour à tous, pourriez vous m'aider?

je fais une méthode logout, seul problème elle ne fonctionne pas.

Code : Tout sélectionner

$(document).ready(function(){ $('#logout').click(function () { $.ajax({ url : 'Controller/logout.php', type : 'GET', // Le type de la requête HTTP, ici devenu POST dataType : 'html', success : function(code_html, statut){ // code_html contient le HTML renvoyé } }); }); });
ma fonction jquery est bien appellé.

ma fonction logout:

Code : Tout sélectionner

<?php include('../Connexion/Connexion.php'); session_start(); session_destroy(); setcookie("login", "", time() - 3600); setcookie("mdp", "", time() - 3600); setcookie("id_personne", "", time() - 3600); ?>
quand je regarde dans l'inspecteur de google les cookies sont toujours présent.
http://s10.postimg.org/ayt4opzzt/cookie.png
pourtant je respecte les noms, je suis sous wamp.

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

28 oct. 2016, 23:00

salut,

les cookies sont modifiés au chargement de la page.
rafraîchie la page tu ne devrait plus les voir.

ajout un window.location.href pour retourner sur l'index lorsque la déconnexion c'et bien passée.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 385 Messages

02 nov. 2016, 09:33

Merci cela ne fonctionne pas je pense j'ai un problème dans la gestion des session ou cookie,

Ma page de connexion ou index

Code : Tout sélectionner

<?php session_start(); include('Connexion/connexion.php'); $_SESSION['ID_PERSONNE'] = ""; $_SESSION['ERREUR'] = ""; if (!empty($_COOKIE['id_personne'])) { // Test si les champs sont plein $id_personne = $_COOKIE['id_personne']; setcookie('id_personne', $id_personne, time() + 365*24*3600); $_SESSION['id_personne'] = $id_personne; header('Location: accueil.php'); // redirige vers l'accueil } if ((!empty($_POST['login']) && !empty($_POST['mdp']))) { // Test si les champs sont plein $login = $_POST['login']; // Remplace les simple quote par des double quote pour éviter les problemes d'injection sql $mdp = sha1($_POST['mdp']); // Vérification des identifiants $req = $bdd->prepare('SELECT id_personne FROM personne WHERE login = :login AND mdp_personne = :mdp'); $req->execute(array( 'login' => $login, 'mdp' => $mdp)); $resultat = $req->fetch(PDO::FETCH_ASSOC); if (!$resultat) { $_SESSION['ERREUR'] = "Login et/ou mot de passe incorrect"; // Message d'erreur } else { setcookie('id_personne', $resultat['id_personne'], time() + 365*24*3600); $_SESSION['id_personne'] = $resultat['id_personne']; header('Location: accueil.php'); // redirige vers l'accueil } } ?>
ma page d'accueil ou je gère l'inventaire avec un tableau

Code : Tout sélectionner

<?php session_start(); include_once("Connexion/Connexion.php"); if(!isset($_SESSION['id_personne']) || empty($_SESSION['id_personne'])) { header('Location: index.php'); } $req = $bdd->prepare('SELECT role FROM personne WHERE id_personne = :id_personne'); $req->execute(array( 'id_personne' => $_SESSION['id_personne'])); $resultat = $req->fetch(); $role = $resultat['role']; ?> <!DOCTYPE html> <html lang="fr"> <head> <title>Inventaire</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Latest compiled and minified CSS --> <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" > <link rel="stylesheet" href="css/general.css" > <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> </head> <script src="js/jquery.min.js"></script> <script src="js/jquery.validate.min.js"></script> <script src="bootstrap/js/bootstrap.min.js"></script> <script src="js/tableau.js"></script> <script src="js/search.js"></script> <script src="js/add_user.js"></script> <script src="js/add.js"></script> <script src="js/logout.js"></script> <body> <!-- header --> <div id="error"> </div> <header class="header row"> <img src="img/header.png" class="col-md-11 " height="100"> <img src="img/logout.png" id="logout" style="cursor:pointer;" class="col-md-1" height="50"> </header> <div class="body "> <?php if($role == 'admin') { ?> <section class="container col-md-2 col-md-offset-1"> <h1 data-toggle="modal" data-target="#ajout">Ajout</h1></button> <?php include('formulaire/add.html'); ?> </section> <?php } ?> <section class="container col-md-2 col-md-offset-2"> <h1 data-toggle="modal" data-target="#inscription">Inscription</h1> <?php include('formulaire/add_user.html'); ?> </section> <section class="container col-md-2 col-md-offset-2"> <h1>Contitech</h1> </section> </div> <section class=" row col-md-12 col-md-offset-5 search"> <?php include('formulaire/search.php'); ?> </section> <aside class=" row col-md-12" style="margin-top:20 px;"> <?php include('Controller/tableau.php'); ?> </aside> <br /> </body> </html>
ma page de déconnexion qui est bien appelé :

Code : Tout sélectionner

<?php include('../Connexion/Connexion.php'); session_start(); session_destroy(); setcookie("id_personne", "", time() - 3600); echo "<script>window.location='../index.php'</script>"; ?>

Petit nouveau ! | 9 Messages

02 nov. 2016, 11:19

Bonjour,

Dans ta page logout, tu devrais mettre ton include après l'ouverture de ta session. De plus, pour savoir si ta session est bien démarrer, tu peux vérifier sa valeur de retour.

http://php.net/manual/fr/function.session-start.php
<?php
session_start();
session_destroy();
setcookie("id_personne", "", time() - 3600);

include('../Connexion/Connexion.php');
echo "<script>window.location='../index.php'</script>";
?>
Bonne continuation.
Vincent Chapron
Formateur et Consultant PHP/JS @Openska
Twitter: @vincent_chapron

Eléphant du PHP | 385 Messages

02 nov. 2016, 13:25

Merci de ta réponse , ma session est bien initialisé et me renvoi 1, le script de redirection fonctionne mais le cookie n'ai pas supprimé car je suis redirigé vers ma page d'accueil et non la page de login.

Petit nouveau ! | 9 Messages

02 nov. 2016, 14:45

Pour vérifier tes cookies sur Chrome :
  • - clic droit sur ta page
    - puis inspecter l'élément
    - sélectionne l'onglet application (À droite de "elements", "console", "sources" ...)
    - dans le menu à gauche, déroule les cookies
    - sélectionne l'adresse de ton site
En ce qui concerne la redirection, si tu souhaite rediriger après déconnexion vers la page de connexion alors utilise :
<?php
session_start();
session_destroy();
setcookie("id_personne", "", 1);

header('Location: ../Connexion/Connexion.php');
?>
Vincent Chapron
Formateur et Consultant PHP/JS @Openska
Twitter: @vincent_chapron

Eléphant du PHP | 385 Messages

02 nov. 2016, 15:17

c'est bon cela fonctionne,

Code : Tout sélectionner

<?php session_start(); session_destroy(); unset($_COOKIE["id_personne"]); setcookie("id_personne","",time()-1); header('Location: ../index.php'); ?>
Je pense que le problème venait que j'essayer de le faire en jquery par ajax.

Petit nouveau ! | 9 Messages

02 nov. 2016, 15:54

Essaye de supprimé à la main tous les cookies, dans google chrome (sélectionne les puis touche retour arrière).

Recommence la connexion, vérifie que tu à bien un unique cookie "id_personne" et non deux comme sur ton screenshot.

Vérifie dans chrome que le "path" de ton cookie est bien "/" (dans le tableaux des cookies tu as une colonne path).

EDIT: Résolu OK ;)
Vincent Chapron
Formateur et Consultant PHP/JS @Openska
Twitter: @vincent_chapron