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 :

fonctions sessions suppression donnee des variables sessions [PHP 5.6]


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 fonctions sessions suppression donnee des variables sessions
    Bonjour

    Je cherche dans http://php.net/manual/fr/ref.session.php

    une fonction non pas qui détruit les variables session ou la session mais le contenu des variables, les mettant à vide ou null.

    J'ai bien cru que session_reset() pourrait le faire mais celle ci ne fait que reprendre les dernières valeurs enregistrées.

    J'ai essayé après un premier appel à session_start,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //session_unset();
    //session_destroy();
    //session_start (); // On démarre la session AVANT toute chose
    mais sur certaine page ou appelle de fonction qui utilise des variables session forcément si session unset a été appelé juste avant même si y'a session_start étant placé après...ça plante !
    c'est toute la structure du site que je dois repenser alors qu'une fonction qui supprime le contenu et non les variables session suffirait.

    Y'en a peut-être pas ?Ou y'a t-il une astuce en combinant les fonctions de php sur les sessions ?

    Ou suis je obligé de mettre à null ou vide ('') chaque variable session manuellement et créer une fonction perso ?
    J'ai pensé aussi sur les pages ou appel de fonctions qui utilisent des variables sessions et qui posent problèmes de tester avec session_status() ou dans une fonction qui vérifie avec un return true/false
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (session_status() == PHP_SESSION_ACTIVE) {
    //on continue et utilise les variables sessions
    }else{
    //on arrete et on fait rien  donc pas de else ou on affiche quelque chose ou fait autres choses sans variables sessions
    }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Je ne crois pas qu'il y ai une fonction native de php qui vide chaque variable de session.

    En revanche, $_SESSION est un tableau donc c'est assez simple à vider avec un foreach :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($_SESSION as $cle => $valeur) {
        $_SESSION[$cle] = null; //ou "" ou ce que tu veux
    }
    Tu peux obtenir un résultat identique en utilisant array_map() ou array_walk().

  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
    mais j'espérais qu'il y ait une fonction native de php pour le faire !
    j'y avais pensé et créer une fonction :
    (je ne connaissais pas array_map et array_walk ça peut peut-être aller encore plus vite !)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function session_empty(){
     foreach ($_SESSION as $cle => $valeur) {
        $_SESSION[$cle] = null; //ou ""
     }
    }
    et en vérifiant d'ailleurs si la session est active ou pas avec session_status

    par contre justement j'ai du mal à comprendre http://php.net/manual/fr/function.session-status.php

    PHP_SESSION_NONE si les sessions sont activées, mais qu'aucune n'existe.
    PHP_SESSION_ACTIVE si les sessions sont activées, et qu'une existe.

    PHP_SESSION_NONE : j'ai du mal à comprendre la nuance : actives et aucune existe !
    après un session_destroy() elles ne sont pas actives ni n'existent, non ?
    qu'est ce qui peut faire qu'elles soient encore actives mais qu'aucune n'existe ?

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je pense que SESSION_NONE correspond à "il est possible de faire des sessions sur ce serveur mais on n'a pas encore appelé de session_start" par opposition à SESSION_DISABLED qui correspond à "la fonctionnalité session est désactivée sur ce serveur, donc session_start ne marchera pas".
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    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 suis pas certain d'avoir compris ton problème... Ou cela veut dire que tu as des scripts qui utilisent des variables de session sans tester leur existence, ce qui va à l'encontre des bonnes pratiques élémentaires. Si c'est le cas tu ferais mieux de corriger ce problème en vérifiant tes variables avant de les utiliser.

    Sinon pour répondre plus directement à ta question, je n'ai jamais entendu parler qu'il existe une fonction dédiée pour effacer le contenu de ces variables. Mais bon c'est un tableau, donc tu peux utiliser une fonction récursive array_walk_recursive ou encore RecursiveArrayIterator pour les effacer sans besoin de le faire nommément pour chaque variable.

  6. #6
    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
    si j'ai une fonction qui teste l'entrée dans le site et qui teste les variables par ex $_session[nom] $_session[prenom] avec isset et si elles sont vides

    Mais j'ai crée un page fonction.php appelé dans le head qui contient cette fonction un peu à la manière de wordpress
    Sauf que sur certaine page et j'ai du mal pensé à la structure même de ce petit site.

    Certains éléments html : header ou des menus testent cette fonction pour afficher ou pas le nom et le prénom.
    Alors qu'ailleurs
    soit la session est terminée par un session_destroy() ou session_unset()
    (je n'ai trouvé que cela pour tenter de vider mes variables au début en essayant de les positionner au bon endroit),
    soit parce qu' il rencontre de nouveau un session start alors que la session est déjà active... donc bug !

    Donc pour moi le mieux aurait été de vérifier si les variables sont vides ou null et là plus de problèmes pour gérer l'appel de cette fonction.D'où le sujet de départ !

    Mais je commence aussi un peu à comprendre la nuance entre sessions actives et session existante.
    J'aurais d'ailleurs mieux compris dans l'autre sens : plusieurs sessions existantes et une seule session active ! dans le sens où les sessions sont sauvegardées mais non utilisées au sein du serveur.
    Et c'est en lisant en diagonale http://php.net/manual/fr/sessionhandlerinterface.gc.php et http://php.net/manual/fr/sessionhandler.gc.php mais là je me complique la vie en plus de ne pas tout saisir par manque de pratique même si c'est intéressant !
    Ca ressemble presque à du java sur les objets non utilisés dans le sens où les sessions ont une durée de vie aléatoire dans le serveur. Je me trompe ?

    Pour l'instant je vais me contenter (je n'ai pas encore essayé) de faire ma fonction pour vider ou mettre à null les variables de la session "existante" au début en testant si elle est à none ou disabled sinon les variables $_session vont faire planter ma fonction et puis je verrais si c'est suffisant. Après je marquerais résolu sauf si j'ai encore des alertes ou erreurs fatales !

  7. #7
    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
    Tu peux aussi déclarer une session même si tu ne t'en sert pas. Dans ton fichier fonctions.php que tu inclus normalement dans toutes tes pages tu pourrait faire classiquement if(session_status() !== PHP_SESSION_ACTIVE) session_start();.

    Ensuite on utilise session_destroy() si veut mettre fin à une session administrateur par exemple, donc plutôt sur demande utilisateur mais pas systématiquement dans un script (c'est très rarement utile/souhaitable et il est souvent suffisant de supprimer nommément certaines variables). Comme tu le dis ton problème semble plus provenir de l'organisation de ton code qu'autre chose et tu aurais probablement intérêt à corriger cette organisation plutôt que de chercher à la faire marcher coute que coute tel quel, ce qui te demandera un code supplémentaire plus ou moins alambiqué et surtout il est probable que cette organisation non optimisée te limite également par la suite pour l'évolution de ton site...

  8. #8
    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

    Ensuite on utilise session_destroy() si veut mettre fin à une session administrateur par exemple, donc plutôt sur demande utilisateur mais pas systématiquement dans un script (c'est très rarement utile/souhaitable et il est souvent suffisant de supprimer nommément certaines variables).
    Je n'ai pas bien compris selon toi :
    session_destroy() plutôt coté admin ou coté utilisateur

  9. #9
    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
    Quand on fait un système d'authentification, le plus souvent c'est basé sur des variables de session. A la fin de la session administrateur, celui-ci peut fermer toutes les fenêtres de son navigateur pour terminer sa session mais le plus pratique est de disposer d'un bouton "déconnexion" qui en fait va déclencher la plupart du temps un "session_destroy()" pour effacer toutes les variables de sessions... Le session_destroy est donc fait sur demande utilisateur qui dans ce cas de figure est aussi un administrateur.

  10. #10
    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 ce que je fais. je comprenais mal ta phrase.
    par contre j’entends souvent le terme "script". ça peut paraitre très néophyte mais est ce pour vous c'est une fonction php ou js ? ou une page spéciale avec des fonctions php ou js perso ? ou même une page du site spéciale ?

    sinon mon problème est résolu en arrangeant un peu la structure du site effectivement.
    La fonction session_empty est suffisante pour l'instant sans session_destroy puisque y'a pas d'enregistrement des identités dans une base de données même si je le fais quand même avant une nouvelle connexion.
    encore que sur php.net http://php.net/manual/fr/book.session.php sur les fonctions session_unset ou session_destroy les commentaires de certains sont parfois très différents pour mettre fin à une session.

    (je marque résolu) mais vous pouvez me répondre pour ce terme script qui pour moi est une fonction perso dans un fichier php ou js externe, fonction appelée à certains endroits pour faire telle ou telle chose.

    Merci bien pour l'aide et pour les cours et tutoriels web PHP !

  11. #11
    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
    On emploie ce mot dans son sens commun "En informatique, un script est un programme en langage interprété" (cf wikipedia). Au sens général ça peut concerner tout ou partie d'un programme, plus ou moins autonome dans le sens ou la plupart l'emploient comme un simple synonyme de "lignes de code".

  12. #12
    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 parce qu’après réflexion faite, un script pour moi c'est un fichier ou un programme comme par ex un fichier batch, ou un programme spécifique qui enregistre toutes les mn ce que j'écris ici.

    Or avec un serveur et un ou des clients, surtout pour un site internet, la plupart du temps c'est le client qui appelle le serveur par des liens, des boutons si c'est sur sa machine par js,etc...
    Et en l'occurence pour une déconnexion :
    soit y'a un lien ou un bouton js qui déconnecte la session coté client puis envoie vers serveur.(truc un peu lourd et inutile d'ailleurs, mais parfois perso je suis capable de me lancer dans ce genre de code juste pour me prendre la tête lol).
    Alors qu'un bon vieux submit sans rien dans un formulaire vide fera aussi bien lançant là effectivement une page ou une valeur dans une fonction qui déconnecte (là on peut presque parler vraiment de script)
    soit il quitte la page (DOM document ou window) et avant le dernier </html> faire une déconnexion de session, dans tous les cas c'est le client qui a choisit.(là on peut encore presque parler vraiment de script)

    Mais là le seul fait d'appeler session_destroy() c'est envoyer une instruction donc rien d'autonome et qui génère un processus coté serveur qui termine la session.

    Voilà pourquoi cela me parait assez rare le terme de "script" réellement pour la plupart des sites (a part pour un tchat qui censure) mais ok si ce terme c'est généralisé pour dire "ligne de code" ou "bout de code".
    Je le comprenais ainsi aussi mais parfois je me demande encore si la personne parle vraiment de script ou de codage.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par nouilletonne Voir le message
    oui parce qu’après réflexion faite, un script pour moi c'est un fichier ou un programme comme par ex un fichier batch, ou un programme spécifique qui enregistre toutes les mn ce que j'écris ici.

    Or avec un serveur et un ou des clients, surtout pour un site internet, la plupart du temps c'est le client qui appelle le serveur par des liens, des boutons si c'est sur sa machine par js,etc...
    Et en l'occurence pour une déconnexion :
    soit y'a un lien ou un bouton js qui déconnecte la session coté client puis envoie vers serveur.(truc un peu lourd et inutile d'ailleurs, mais parfois perso je suis capable de me lancer dans ce genre de code juste pour me prendre la tête lol).
    Alors qu'un bon vieux submit sans rien dans un formulaire vide fera aussi bien lançant là effectivement une page ou une valeur dans une fonction qui déconnecte (là on peut presque parler vraiment de script)
    soit il quitte la page (DOM document ou window) et avant le dernier </html> faire une déconnexion de session, dans tous les cas c'est le client qui a choisit.(là on peut encore presque parler vraiment de script)

    Mais là le seul fait d'appeler session_destroy() c'est envoyer une instruction donc rien d'autonome et qui génère un processus coté serveur qui termine la session.

    Voilà pourquoi cela me parait assez rare le terme de "script" réellement pour la plupart des sites (a part pour un tchat qui censure) mais ok si ce terme c'est généralisé pour dire "ligne de code" ou "bout de code".
    Je le comprenais ainsi aussi mais parfois je me demande encore si la personne parle vraiment de script ou de codage.

    Juste pour rebondir là dessus, ta notion de session me semble erronée.

    "un bouton js qui déconnecte la session côté client" n'a pas de sens, la session php ne peut pas être altérée uniquement côté client. Ta déconnexion DOIT communiquer avec ton serveur et ce n'est pas pas lourd et certainement pas inutile.


    Et pour la définition de script, celle de wikipedia citée plus haut est très bien. Pour le web, ton client n'appelle pas le serveur par 'des liens, des boutons, par js'' mais par des requetes HTTP. Les liens html, boutons et javascript ne font que donner l'instruction au navigateur d’émettre des requêtes HTTP. Ton serveur ensuite se charge de transmettre cette requête a PHP (dans notre cas, et pour simplifier) qui exécute ensuite le script correspondant à la requête.

  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
    Citation Envoyé par Mrsky Voir le message
    Juste pour rebondir là dessus, ta notion de session me semble erronée.

    "un bouton js qui déconnecte la session côté client" n'a pas de sens, la session php ne peut pas être altérée uniquement côté client. Ta déconnexion DOIT communiquer avec ton serveur et ce n'est pas pas lourd et certainement pas inutile.


    Et pour la définition de script, celle de wikipedia citée plus haut est très bien. Pour le web, ton client n'appelle pas le serveur par 'des liens, des boutons, par js'' mais par des requetes HTTP. Les liens html, boutons et javascript ne font que donner l'instruction au navigateur d’émettre des requêtes HTTP. Ton serveur ensuite se charge de transmettre cette requête a PHP (dans notre cas, et pour simplifier) qui exécute ensuite le script correspondant à la requête.
    oui j'avoue que je me suis très mal exprimé.
    Pour le js c'était juste pour dire que je suis capable de me compliquer la vie avec du js pour executer un script php voir faire de l'ajax pour le serveur juste pour fermer une session.
    Et pour les requètes HTTP c'était implicite pour moi.
    Mais de toute façon c'était très mal exprimé désolé !

    Même si je réfléchis avant sur papier.
    Je suis aussi compliqué dans mon code c'est pourquoi que souvent j'aurais pu faire plus simple pour un même résultat.
    Je sais que c'est mon problème mais je me soigne lol et que j'aime bien l'informatique parce que c'est une bonne école pour devenir moins compliqué

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

Discussions similaires

  1. Détruire des variables session
    Par jules_diedhiou dans le forum Langage
    Réponses: 4
    Dernier message: 10/11/2008, 23h52
  2. Réponses: 1
    Dernier message: 11/06/2007, 23h39
  3. gestion des Variables Sessions
    Par Landolsi dans le forum ASP.NET
    Réponses: 8
    Dernier message: 08/02/2007, 13h30
  4. [Sécurité] Non persistence des variables session ?
    Par Christophe Charron dans le forum Langage
    Réponses: 9
    Dernier message: 28/02/2006, 22h05
  5. Réponses: 6
    Dernier message: 28/11/2005, 12h03

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