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

  1. #1
    Membre régulier
    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
    Points : 95
    Points
    95
    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 éclairé Avatar de Geoffrey74
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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
    Points : 760
    Points
    760
    Par défaut
    Moi j'utilise session_destroy()

  3. #3
    Membre régulier
    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
    Points : 95
    Points
    95
    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 éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    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 régulier
    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
    Points : 95
    Points
    95
    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 éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    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

  7. #7
    Membre régulier
    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
    Points : 95
    Points
    95
    Par défaut
    avec $_Session=[] je perd les clés avec
    là je met à null les valeurs pour chaque clés du tableau c'est un peu différent mais je ne perd pas les clés ! Non ?


    Ok entre and et && et or et || ! Ceux sont les opérateurs en C qui sont à l'origine du langage PHP. Non ?

    and et or ont été rajouté pour évaluer les deux variables en même temps, c'est ça ?
    and et or ne sont plus des expressions logiques classiques mais quasiment des affectations à évaluer :

    $a and $b <=> ($a =true OR false) AND ($b = TRUE OR FALSE)
    $a or $b <=> ($a =true OR false) OR ($b = TRUE OR FALSE)

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Et tu veux en faire quoi de ces clés si elles ne sont plus définies ? Quand on efface toutes les variables de sessions c'est qu'on en a plus besoin alors pourquoi voudrais-tu que les clés soient persistantes, dans quel contexte cela peut-il t'être utile ?

  9. #9
    Membre régulier
    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
    Points : 95
    Points
    95
    Par défaut
    pour pouvoir après une connexion pouvoir se reconnecter avec les memes cookies par ex qui ont les memes noms que les clés de la session mais pas avec les memes valeurs.
    et en cas de fin de time () pour les cookies réinitialiser les cookies sur une nouvelle session avec les clés et nouvelle valeurs.
    Tout cela selon des contextes différents si la session est "active", "none", ou "disabled".

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Je vois toujours pas mieux à quoi ça peut servir, enfin bon si t'as envie de te compliquer la vie...

  11. #11
    Membre régulier
    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
    Points : 95
    Points
    95
    Par défaut
    bien pour moi ça a 2 utilités :
    niveau sécurité :
    si la personne au moment de se connecter créé le cookie et même si je lui autorise 3 ou n fois d'entrer un nom et prénom valide pour sa session
    je les compares au cookie et aux tentatives d'entrée en session et aux données de la base de données et ça renforce pour moi car même si il supprime ses cookies c'est une manip supplémentaire ce qui peut être fastidieux, d'autant que si je supprime les cookies et blackliste dans la base ce genre de tentatives, c'est encore plus long

    mais ceci j'y ai pensé après mais au départ :
    c'était pour une fois connecté correctement il puisse entrer un pseudo différent pour des sessions différentes tout en étant correctement connecté tout de suite grace aux cookies, session et comparés avec les noms enregistrés dans la base.

    mais c'est peut-être plus simple ?
    mais pour moi ne connaissant pas bien toutes les fonctions php liées aux sessions et cookie ça avait l'utilité par contre pour moi d'apprendre à les manipuler !

    Voilà pour mes raisons !

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tout ça m'a l'air d'une usine à gaz qui ne fonctionne même pas.
    Je ne comprends pas même pas ton objectif.

    Quelque soit ton idée, une session PHP ne sert que durant une navigation. Donc vouloir garder la structure du tableau de session plutôt que de tout effacer n'a pas de sens.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Oui là tu t'égare. Les systèmes d'authentifications php sont largement documentés. Renseignes-toi en lisant des doc ou des tutos à ce sujet plutôt que d'essayer d'improviser. Techniquement pour éviter de se faire pirater l'identifiant de session on utilise https.

  14. #14
    Membre régulier
    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
    Points : 95
    Points
    95
    Par défaut
    Oui c'est vrai vous avez tous entièrement raison

    Mais j'avoue que c'était surtout pour apprendre à manipuler les fonctions php lié aux sessions et cookies. J'ai tendance à travailler à comme ça pour apprendre je me lance un défi seul pour comprendre par moi même un sujet méconnu et un problème sur mon site en sachant que je suis obligé par passer par l'étude de pleins de fonctions sur le sujet sur php.net.
    Ensuite je vais voir les tutos sur le sujet "sécurité" etc... par ex et je me fais même des notes d'ailleurs sur ce que je devrais faire une fois le site à peu près stable à mon gout . Après je pose mon problème sur le forum quand je pense avoir épuisé mes capacités d'analyse sur php.net à propos de chaque problème.

    Mais j'ai d'ailleurs résolus mon problème et c'est vrai que c'était une usine à gaz et de moins en moins d'ailleurs car je vois mieux la structure de mon site par rapport à mes sessions et mes cookies comment ils sont réactualisés donc je supprime les codes redondant, les nombreux messages commentaires,... pour voir plus clair et faire plus propre.

    Et de nouveaux problèmes différents arrivent ensuite... C'est pas ça la vie d'un codeur !

  15. #15
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par nouilletonne Voir le message
    Mais j'avoue que c'était surtout pour apprendre à manipuler les fonctions php lié aux sessions et cookies. J'ai tendance à travailler à comme ça pour apprendre je me lance un défi seul pour comprendre par moi même un sujet méconnu et un problème sur mon site en sachant que je suis obligé par passer par l'étude de pleins de fonctions sur le sujet sur php.net.
    C'est pas la bonne méthode! C'est comme si un apprenti maçon regardait une truelle sous tous ses angles pour savoir comment il pourrait bien s'en servir.

    C'est sur l'objectif qu'il faut concentrer ses recherches, par exemple dans ton cas, "authentification php" te montreras comment utiliser correctement les sessions pour une authentification.

    Les fonctions sont prévues pour être utilisées dans un certain contexte. C'est donc le contexte qui détermine les fonctions à utiliser. Si tu cherches à les utiliser en dehors de ce pourquoi elles sont conçues tu vas finir par perdre beaucoup de temps, d'efficacité et de sécurité. Commence par prendre modèle sur les bonnes pratiques avant de jouer aux apprentis sorciers

    C'est ça la vie d'un codeur

  16. #16
    Membre régulier
    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
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    C'est pas la bonne méthode! C'est comme si un apprenti maçon regardait une truelle sous tous ses angles pour savoir comment il pourrait bien s'en servir.

    C'est sur l'objectif qu'il faut concentrer ses recherches, par exemple dans ton cas, "authentification php" te montreras comment utiliser correctement les sessions pour une authentification.

    Les fonctions sont prévues pour être utilisées dans un certain contexte. C'est donc le contexte qui détermine les fonctions à utiliser. Si tu cherches à les utiliser en dehors de ce pourquoi elles sont conçues tu vas finir par perdre beaucoup de temps, d'efficacité et de sécurité. Commence par prendre modèle sur les bonnes pratiques avant de jouer aux apprentis sorciers

    C'est ça la vie d'un codeur
    en période d'apprentissage de nouvelles fonctions ou problème, c'est ma façon de faire.
    Même si je regarde aussi les bonnes pratiques en même temps !
    Mais même en faisant cela, vu qu'il y a à boire et à manger sur google, et que certaines personnes pourtant apparemment avisés,pro ont des façons différentes de faire et de voir un même problème.
    Je suis obligé d'aller voir php.net et voir les fonctions et parfois de demander conseils ici.

+ 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