IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

unset ($_SESSION) et session_unset()


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Par défaut unset ($_SESSION) et session_unset()
    Bonsoir

    Quelle différence majeure entre unset($_Session[]) et session_unset() voir $_SESSION=array()?

    Certains utilisant en plus : $_SESSION=array(); souvant après session_unset et session_destroy

    Merci à vous !

  2. #2
    Membre émérite Avatar de Geoffrey74
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 515
    Par défaut
    Moi j'utilise session_destroy()

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Par défaut
    oui si j'en crois ce que je lis un peu partout,

    unset($_SESSION) tente de détruire une superglobale. J'imagine qu'effectivement php se protège de ce genre d'horreur !Mais pas sur !
    Alors qu'effectivement session_unset() ne fait que mettre à "blanc" donc à null le tableau $_SESSION en cours.
    Que ce soit $_SESSION=array(); ou session_unset() ça doit donner le même résultat!

    Par contre session_destroy() ne met à null toute la session en cours mais elle est toujours sauvegardée un simple session_start() la réactive avec données du tableau et les valeurs associées.

    J'ai d'ailleurs créé une fonction session_empty() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    function session_empty(){
        $_SESSION['$statusSession']=session_status();
     
        if ( $_SESSION['$statusSession'] != PHP_SESSION_DISABLED
            and (   $_SESSION['$statusSession'] == PHP_SESSION_ACTIVE or
                    $_SESSION['$statusSession'] == PHP_SESSION_NONE)
            ){
     
                echo "<p>session_empty</p>";
     
            foreach ($_SESSION as $cle => $valeur) {
                $_SESSION[$cle] = NULL; //ou ""
            }
     
        }elseif ($_SESSION['$statusSession'] == PHP_SESSION_DISABLED ) {
            echo "<p>NO session_empty : PHP_SESSION_DISABLED </p>";
     
        }
     
    }
    j'ai fait pareil pour les cookies étant sous wamp , une fonction cookie_empty():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function cookie_empty(){
        // désélectionner les cookies 3
        $domain = ($_SERVER['HTTP_HOST']!='localhost') ?$_SERVER['HTTP_HOST']:false;
        //setcookie('cookiename', 'data', time()+60*60*24*365, '/', $domain, false);
     
            $cookiesSet = array_keys($_COOKIE);
            for ($x=0;$x<count($cookiesSet);$x++){
                //setcookie($cookiesSet[$x],"",time()-1);
                setcookie($cookiesSet[$x],0,time()-31536000,'/',$domain,false);
                            //là j'ai mis l'équivalent d'une année 31536000 secondes
     }
                echo "<p>cookie_empty</p>";
            /**/
    }

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Faut commencer par les lectures du manuel php

    Il y a un exemple dans la page concernant session_destroy, au cas où tu cherches un moyen de détruire complètement la session :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
    // Initialisation de la session.
    // Si vous utilisez un autre nom
    // session_name("autrenom")
    session_start();
     
    // Détruit toutes les variables de session
    $_SESSION = array();
     
    // Si vous voulez détruire complètement la session, effacez également
    // le cookie de session.
    // Note : cela détruira la session et pas seulement les données de session !
    if (ini_get("session.use_cookies")) {
        $params = session_get_cookie_params();
        setcookie(session_name(), '', time() - 42000,
            $params["path"], $params["domain"],
            $params["secure"], $params["httponly"]
        );
    }
     
    // Finalement, on détruit la session.
    session_destroy();
    ?>

  5. #5
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Par défaut
    J'ai lu et vu ce code qui ne fonctionne pas si bien que ça en local.
    Mais de toute façon, et comme tu peux le remarquer dans mes petites fonctions je détruis le contenu dans les cookies et les sessions et non les cookies et sessions eux mêmes.

    Mais c'est vrai que mon sujet portait au début sur la destruction des variables sessions c'est juste que dans mon site je veux vider par moment par ex en cas de connexion à nouveau sans perdre les variables et détruire en cas de totale déconnexion.

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Salut,

    ...l'équivalent de ta fonction "session_empty()" c'est juste $_SESSION = []; donc pas la peine d'une fonction pour cela

    Au passage évites d'utiliser les opérateurs "and" et "or" car c'est piégeur dans certains cas. L'utilisation de "&&" et "||" répond à la logique généralement attendue (précédence des opérateurs), si bien qu'on utilise ces opérateurs quasi systématiquement pour éviter de se poser des questions à ce niveau là. Et quand c'est plus opportun d'utiliser "and" et "or" alors on commente le code pour expliquer pourquoi on fait cette exception. Cela fait gagner beaucoup de temps quand on a ensuite plusieurs milliers de lignes de code à relire

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.5] Unset($_SESSION['foo']) est effectué en dehors de son scope!
    Par 3ym3r1c dans le forum Langage
    Réponses: 7
    Dernier message: 31/05/2016, 00h22
  2. Réponses: 2
    Dernier message: 24/03/2015, 13h58
  3. Unset fatale error sur une array $_SESSION
    Par helkøwsky dans le forum Langage
    Réponses: 2
    Dernier message: 20/03/2012, 01h30
  4. Pb passage de variable $_GET => $_SESSION
    Par sk8world dans le forum Langage
    Réponses: 3
    Dernier message: 19/12/2005, 15h18
  5. perte d'éléments dans un tableau dans $_SESSION
    Par jibouze dans le forum Langage
    Réponses: 10
    Dernier message: 15/11/2005, 17h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo