Je n'arrive pas à fermer une SESSION

Nostar81
Invité n'ayant pas de compte PHPfrance

27 nov. 2016, 18:06

Bonjour à tous, voici mon problème :

Je suis en train de faire une partie admin sur mon site.

Lorsque le bon identifiant et mdp a été rentré, ca ouvre une session, créé la variable $_SESSION['connect'] et l'initialise à 1.

Jusque la tout va bien. lorsque l'utilisateur retourne à l'index du site (c'est un one page) la sesison est censé être détruite grâce au session_destroy en haut de la page html. Sauf que lorsque j'essai d'atteindre une page de la partie admin directement depuis l'index via l'url et bien la variable $_SESSION['connect'] vaut toujours 1. Je ne comprend pas pourquoi. j'ai mis ça en haut de mon index, j'ai essayé sans le session_start aussi.
<?php
// On appelle la session
session_start();

// On écrase le tableau de session
$_SESSION = array();

if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// On détruit la session
session_destroy();
?>
Et si quand je suis sur l'index je tente d'aller manuellement à une page php telle que celle ci :
<?php
 
session_start();
 
if (isset($_SESSION['connect']))
 
    {
         
        $connect = $_SESSION['connect'];
         
        if ($connect == 1)
     
        {
            if (isset($_GET['supprimer'])) {
                 
             
                $id = $_GET['supprimer'];
 
                if (is_numeric($id))
                     
                {
                     
                    if (isset($_GET['supprimer']))
                         
                            {
 
                                require('festival_connect.php');
                                 
                                $nbr = $bdd->query('DELETE FROM `participation` WHERE `id` ='.$id.'');
                                 
                                include 'supr_valid.php';
 
                            }
                             
                }
 
                else
                {
                include 'acces_refuse.php';
                }
            }
             
            else {
                 
                include 'acces_refuse.php';
                 
            }
 
        }
 
        else {
             
            include 'acces_refuse.php';
             
        }
         
    }
     
else
     
    {
         
        echo 'lol';
         
    }
       
 
 
?>
et bien l'utilisateur y a accès directement sans problème (il se heurte juste au fait qu'il n'a pas mis de variable dans l'url).

Je ne comprend pas vu que la session est détruire a chaque fois quand l'utilisateur est sur l'index il devrait bloquer au premier if ! :'(

ps : j'ai mis echo lol au else du premier if pour tester si ça bloque bien au premier if.

Merci d'avance ! :cry:

Mammouth du PHP | 1967 Messages

27 nov. 2016, 23:39

défini plutôt ta variable de session à 0
$_SESSION['connect'] = 0;
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

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

28 nov. 2016, 16:10

Bonjour,

Il y a effectivement de nombreux retours sur cette fonction qui ne suffit généralement pas à mettre fin à une session. session_destroy() détruit en théorie les données associées à la session courante, mais pas le cookie côté utilisateur. Je ne sais pas si c'est lié, mais il arrive souvent que les informations persistes et il faut parfois une batterie de fonction pour réussir à nettoyer la session.

La solution la plus simple reste à mon sens de définir ta variable à autre chose que 1 comme suggéré par Spols, ou la supprimer de la session avec unset($_SESSION['connect']). Pour autant le $_SESSION = array(); devrait avoir ce même effet. Tu peux ajouter des print_r($_SESSION) pour vérifier ce que contient ta variable de session et t'assurer qu'elle se vide correctement.

Sinon pour nettoyer de fond en comble ta session, tu peux t'inspirer des fonctions suivantes :
<?php
    session_start();
    session_unset();
    session_destroy();
    setcookie(session_name(),'',0,'/');
    session_regenerate_id(true);
?>
A noter : pour pouvoir détruire une session, il faut que celle-ci soit démarrée. Il faut donc bien penser à faire un session_start() avant de pouvoir faire un session_destroy().
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...