Je n'arrive pas à fermer une SESSION

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Je n'arrive pas à fermer une SESSION

Re: Je n'arrive pas à fermer une SESSION

par Ryle » 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().

Re: Je n'arrive pas à fermer une SESSION

par Spols » 27 nov. 2016, 23:39

défini plutôt ta variable de session à 0
$_SESSION['connect'] = 0;

Je n'arrive pas à fermer une SESSION

par Nostar81 » 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: