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 :

[Cookies] comment supprimer une session (cookie) [Fait]


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de Giantrick
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    300
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 300
    Points : 195
    Points
    195
    Par défaut [Cookies] comment supprimer une session (cookie)
    Bonjour,

    Je passe par des sessions cookies (phpsessid) et je souhaiterais supprimer à la fois la session (ce que j'arrive) et le cookie de session ce que je n'arrive pas à faire.

    Voila les lignes de codes que j'ai tester pour tenter de le détruire (sans succès) une par une (pas ensemble bien sûr !!!)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    1) setcookie(session_name(PHPSESSID), "", time()-3600);
    2) setcookie(session_name(), "", time()-3600);
    3) setcookie("PHPSESSID", "", time()-3600);
    4) $_SESSION = array();
    merci de votre aide (car j'ai parcouru les tutos et je pensais faire comme indiqué mais il doit me manquer qqchose)

    nb : je tourne en PHP5

  2. #2
    Membre averti Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Points : 301
    Points
    301
    Par défaut
    unset($_SESSION) ??

  3. #3
    Membre habitué Avatar de Giantrick
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    300
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 300
    Points : 195
    Points
    195
    Par défaut
    Citation Envoyé par max44410
    unset($_SESSION) ??
    je ne sais pas, car j'ai lu que c'était fortement déconseillé dans le tutorial de developpez.com (voir le lien)

    http://php.developpez.com/cours/sess...age=manip#L2.8

    Si quelqu'un peut donner une piste ou confirmer l'information de max44410 le cas échéant (car dans ce cas, j'ai deux avis, un contraire et l'autre pour, avec un point d'interrogation)

  4. #4
    Membre averti Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Points : 301
    Points
    301
    Par défaut
    Ahhh .. bah si c'est déconseillé faut pas le faire
    je lancais juste une idée

  5. #5
    Membre habitué Avatar de Giantrick
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    300
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 300
    Points : 195
    Points
    195
    Par défaut
    pas de soucis, mais comme je ne suis pas un crack en session... je préfère poser la question...

    j'attendrais une autre suggestion...

  6. #6
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Ben je comprend pas trop ce que tu cherche a faire mais pour detruire une session complete:
    session_destroy();
    Et sinon pour détruire juste une variable de session:
    session_unregister('nomdevariable');

  7. #7
    Membre habitué Avatar de Giantrick
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    300
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 300
    Points : 195
    Points
    195
    Par défaut
    Citation Envoyé par cerede2000
    Ben je comprend pas trop ce que tu cherche a faire mais pour detruire une session complete:
    session_destroy();
    Et sinon pour détruire juste une variable de session:
    session_unregister('nomdevariable');
    je ne peux pas utiliser cette fonction car je suis en session_global et pas en register_globals.

    Pour la session_destroy() ça marche mais je n'arrive pas a détruire la session cookie (PHPSESSID)....

    Mais merci quand même...

    Quelqu'un d'autre ?

  8. #8
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    J'ai trouvé ceci:
    Pour faire une bonne déconnexion :

    1) Supression des variables de session : unset($_SESSION['tac']);

    2) Supression du cookie de la session : setcookie('PHPSESSID', FALSE);

    3) Supression de la session : session_destroy();
    Et unset est deconseillé juste si tu veut utiliser ta session apres...
    Hors tu cherche a la detruire completement c'est donc comme ca qu'il faut faire

  9. #9
    Membre habitué Avatar de Giantrick
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    300
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 300
    Points : 195
    Points
    195
    Par défaut
    Bon j'ai testé mais cela ne fonctionne pas du tout, cela ne retire pas le cookie de session ni même le cookie que j'ai passé pour le username...

    Donc voici le code de mon script de deconnexion...

    nb : j'ai un cookie de session PHPSESSID
    et un autre cookie qui se nomme : lien_perso_username.

    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
    24
    25
    26
    27
    28
    29
    <?
    session_start();
    include("../fonctions/top_page.php");
    // test pour savoir si l'internaute est loggé
    if(isset($_COOKIE[session_name()]))
        {
        unset($_SESSION['']);
        setcookie('PHPSESSID', FALSE);
        if(isset($_COOKIE[lien_perso_username]))
        	{
        	setcookie ("lien_perso_username", "", time() -3600);
        	print("le cookie est supprim&eacute;<br><br><br>");
        	}
     
    	if (session_destroy()) 
    		{
        	echo 'Session détruite !<BR>';
    		}
    	else 
    		{
        	echo 'Erreur : impossible de détruire la session !';
    		}
    print("Vous &ecirc;tes d&eacute;connect&eacute;(e)<br><br>");
        }
    else
    	{
    	print("Vous n'&ecirc;tes pas connect&eacute;(e)");	
    	}
    ?>
    voici le contenu de la page "top_page.php" pour information et qui fonctionne bien et permet de récupérer toutes les variables d'une page à l'autre sans problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?
    extract($_POST,EXTR_OVERWRITE);//Pour rŽcupŽrer les variables des requtes prŽcŽdentes
    extract($_GET,EXTR_OVERWRITE);//Pour rŽcupŽrer les variables des requtes prŽcŽdentes
    extract($_REQUEST,EXTR_OVERWRITE);//Pour rŽcupŽrer les variables des requtes prŽcŽdentes
    extract($_COOKIE,EXTR_OVERWRITE);//Pour rŽcupŽrer les variables des requtes prŽcŽdentes
    extract($_SERVER,EXTR_OVERWRITE);//Pour rŽcupŽrer les variables des requtes prŽcŽdentes
    if(isset($_SESSION['username']))
    {
    extract($_SESSION,EXTR_OVERWRITE);//Pour rŽcupŽrer les variables des requtes prŽcŽdentes
    }?>
    Je ne sais plus quoi faire.... mais je suis têtu !

  10. #10
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Eu en passant on ne met pas <? mais <?php

  11. #11
    Membre habitué Avatar de Giantrick
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    300
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 300
    Points : 195
    Points
    195
    Par défaut
    Citation Envoyé par cerede2000
    Eu en passant on ne met pas <? mais <?php
    ok j'ai noté, juste une question : pourquoi ? quelle est la différence, cela fonctionne bien sans aussi non ?! (et je ne veux surtout pas me prendre les foudres des puristes... )

  12. #12
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    En php web on doit mettre <?php <? c'est pour le php dans le pearl

  13. #13
    Membre habitué Avatar de Giantrick
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    300
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 300
    Points : 195
    Points
    195
    Par défaut
    Citation Envoyé par cerede2000
    En php web on doit mettre <?php <? c'est pour le php dans le pearl
    bon ben je viens d'apprendre une nouvelle chose aujourd'hui sur PHP, même si cela ne m'aide pas sur mon problème immédiat


  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par cerede2000
    Et sinon pour détruire juste une variable de session:
    session_unregister('nomdevariable');
    Fonction dépréciée voir le tutoriel cité plus haut !

    Citation Envoyé par cerede2000
    En php web on doit mettre <?php <? c'est pour le php dans le pearl
    PEARL, késako ? C'est simplement par soucis de portabilité car l'emploi des balises courtes (<? et <?=) dépend du paramètre short_open_tag qui n'est pas toujours positionné sur On.


    • Utiliser extract sur les variables externes est dangereux puisque les variables peuvent être écrasées (par vous-mêmes ou quelqu'un de mal intentionné).
    • Sur cette ligne, il manque l'index :
    • PHPSESSID est le nom par défaut de la session, la fonction session_name permet d'obtenir le nom courant de la session.
    • Concernant la différence entre $_SESSION = array() et session_destroy : la première vide la session mais le fichier de stockage est conservé, la deuxième détruit en plus le fichier de stockage.
    • Est-ce que les paramètres au niveau du serveur/chemin sont strictement
      identiques à ceux du cookies de session ?
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      setcookie(session_name(), 0, time(), '/');
    • Voir aussi : la fonction session_regenerate_id

  15. #15
    Membre habitué Avatar de Giantrick
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    300
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 300
    Points : 195
    Points
    195
    Par défaut
    Citation Envoyé par julp
    (...) C'est simplement par soucis de portabilité car l'emploi des balises courtes (<? et <?=) dépend du paramètre short_open_tag qui n'est pas toujours positionné sur On.
    je vais faire attention de les mettre à partir de maintenant mais jusqu'ici pas de soucis.

    Citation Envoyé par julp
    (...)Utiliser extract sur les variables externes est dangereux puisque les variables peuvent être écrasées (par vous-mêmes ou quelqu'un de mal intentionné).
    Que proposes-tu à la place d'extract ? J'ai trouvé cela très pratique et rapide pour la programmation, je n'avais pas pensé à la sécurité sur ce coup là !

    Citation Envoyé par julp
    (...)
    Est-ce que les paramètres au niveau du serveur/chemin sont strictement
    identiques à ceux du cookies de session ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setcookie(session_name(), 0, time(), '/');
    En effet ca fonctionne beaucoup mieux avec le chemin (va bien falloir que je me le mettre en 2 mètres par 2 mètres dans mon bureau, attention à ne pas oublier les chemins, j'arrête pas de les oublier ceux là)

    Enfin, il vaut mieux tard que jamais mais j'ai quand même perdu un peu de temps avec ça.... donc un GRAND MERCI JULP ainsi que pour tes tutos... (au passage)

    Citation Envoyé par julp
    Voir aussi : la fonction session_regenerate_id[/list]
    Je vais regarder cela dès que j'aurais un peu de temps.

  16. #16
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par Giantrick
    Que proposes-tu à la place d'extract ? J'ai trouvé cela très pratique et rapide pour la programmation, je n'avais pas pensé à la sécurité sur ce coup là !
    Je n'en doute pas mais vous revenez ainsi en arrière en simulant la fonctionnalité register_globals (autant la mettre à On en ce cas ). PHP vous fournit les tableaux superglobaux correspondant à chaque méthode ($_GET, $_POST, etc) donc pourquoi ne pas les utiliser directement ? Cela vous permet d'accéder uniquement aux données voulues : qui vous dit sinon qu'elle provient de la session, de l'url, d'un formulaire ou que l'une d'entre elle n'en écrase (ou exclut suivant l'option d'extract) pas une autre (vous pourriez ainsi passer des heures à chercher un bug).

    Ecrire $_GET['foo'] au lieu de $foo n'est guère plus long à écrire et d'autre part facilite la compréhension du code (pensez à vos successeurs, nous qui vous dépannons et enfin vous-même !) : $foo sort en quelque sorte de nul part alors qu'il viendrait en réalité de la méthode GET. Si vous préférez cette écriture, je pense que vous pouvez trouver un compromis en préfixant vos variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    extract($_GET, EXTR_PREFIX_ALL, 'g_');
    echo $g_foo;
    (le but étant d'avoir un préfixe propre à chaque méthode).

  17. #17
    Membre habitué Avatar de Giantrick
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    300
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 300
    Points : 195
    Points
    195
    Par défaut
    Citation Envoyé par julp
    Je n'en doute pas mais vous revenez ainsi en arrière en simulant la fonctionnalité register_globals
    Etant autodidacte en PHP, et bien que je me documente beaucoup, je n'avais pas pensé que c'était une faille importante... maintenant que vous me le détaillé, je comprend.

    Citation Envoyé par julp
    Ecrire $_GET['foo'] au lieu de $foo n'est guère plus long à écrire et d'autre part facilite la compréhension du code (pensez à vos successeurs, nous qui vous dépannons et enfin vous-même !) : $foo sort en quelque sorte de nul part alors qu'il viendrait en réalité de la méthode GET. Si vous préférez cette écriture, je pense que vous pouvez trouver un compromis en préfixant vos variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    extract($_GET, EXTR_PREFIX_ALL, 'g_');
    echo $g_foo;
    (le but étant d'avoir un préfixe propre à chaque méthode).
    Je vais donc reformater mon code pour les intégrer directement dedans via les $_GET et autres tableaux associés.

    Merci pour les informations.

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

Discussions similaires

  1. [Delphi/WebService] Comment gérer une session HTTP (cookie) ?
    Par adrien_as dans le forum Web & réseau
    Réponses: 3
    Dernier message: 20/03/2009, 11h55
  2. Réponses: 11
    Dernier message: 21/02/2008, 02h47
  3. Comment gérer une session par cookie sur page asp
    Par alexsolex dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/10/2007, 22h30
  4. Réponses: 4
    Dernier message: 12/12/2006, 08h14
  5. Réponses: 11
    Dernier message: 27/05/2006, 00h07

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