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 :

Log out d'une session


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Points : 18
    Points
    18
    Par défaut Log out d'une session
    Bonjour,

    J’ai un petit problème de session.

    Voilà j’ai deux petites applications qui tournent sur le même serveur et que j’ouvre dans le même navigateur dans deux onglets, j’aimerai pouvoir faire un log out d’une des applications sans être délogé de l’autre.

    Pour ce faire je pensais faire ça comme ceci mais ça ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if($_GET['action'] == 'logout'){
    	$_SESSION['appli01']['id'] = "";
    	$_SESSION['appli01']['fname'] = "";
    	$_SESSION['appli01']['lname'] = "";
    	$_SESSION['appli01']['email'] = "";
    	unset($_SESSION['appli01']);
    }
    Et en changent le 'appli01' en 'appli02' pour la 2éme application.

    Quelqu’un aurait-il une idée ?

    Merci,
    Ted

  2. #2
    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
    Ca veut dire quoi "ca ne marche pas" ? Qu'obtiens tu ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    il me delogge des deux applications.

    Merci,
    Ted

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Peut être est ce la manière dont tu ouvre ton 2ème onglet de ta 2ème appli ? Faudrait en dire plus sur ce point.

    Puis est ce que ces 2 applications sont réellement 2 sites Web différents ? Dans 2 répertoires différents de ton webRoot ?

    Théoriquement il n'est pas possible d'accéder aux données d'une session différente de la sienne, donc encore moins d'en détruire une autre, ceci fait que tu ne peut que détruire ta propre session.
    Si c'est le cas, alors il y a un souci sur la manière de gérer les sessions.


    Ou alors je suis à coté de la plaque ... il ne s'agirait pas de 2 applications, 2 sites Web, mais d'1 seul sites Web et de variables de sessions différentes selon 2 contextes.

    Destruction d'une session avec session_destroy
    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 (isset($_COOKIE[session_name()])) {
        setcookie(session_name(), '', time()-42000, '/');
    }
     
    // Finalement, on détruit la session.
    session_destroy();
     
    ?>

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    merci des réponses.

    En faite, j'ai :

    www.monsite.be/appli01/ et www.monsite.be/appli02/ que j'ouvre dans 2 onglets de mon navigateur.

    J'ai dans mon fichier config.php ( qui est appelé en 1 ère ligne dans chaque page php de chaque application require_once('config.php'); ), un session_start();
    et une foi que je me suis logé j'ai mis pour l'appli 01 pour initialiser ma session :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $_SESSION['appli01']['a01_id'] = $dbresult->id;
    $_SESSION['appli01']['a01_fname'] = $dbresult->fname;
    $_SESSION['appli01']['a01_lname'] = $dbresult->lname;
    et pour l'appli 02 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $_SESSION['appli02']['a02_id'] = $dbresult->t_id;
    $_SESSION['appli02']['a02_fname'] = $dbresult->t_fname;
    $_SESSION['appli02']['a02_lname'] = $dbresult->t_lname;
    le dbresult va chercher les infos dans 2 table différentes et quand je fait un var_dump ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    array
      'appli01' => 
        array
          'a01_id' => string '101' (length=3)
          'a01_fname' => string 'charles' (length=7)
          'a01_lname' => string 'dupont' (length=6)
      'appli02' => 
        array
          'a02_id' => string '1014' (length=4)
          'a02_fname' => string 'robert' (length=6)
          'a02_lname' => string 'delarue' (length=7)
    Et donc pour faire un logout j'ai mis dans mon appli 01
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if($_GET['action'] == 'logout'){
    	$_SESSION['appli01']['a01_id'] = "";
    	$_SESSION['appli01']['a01_fname'] = "";
    	$_SESSION['appli01']['a01_lname'] = "";
    	unset($_SESSION['appli01']);
    }
    et dans l'appli 02
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if($_GET['action'] == 'logout'){
    	$_SESSION['appli02']['a02_id'] = "";
    	$_SESSION['appli02']['a02_fname'] = "";
    	$_SESSION['appli02']['a02_lname'] = "";
    	unset($_SESSION['appli02']);
    }
    Mais quand je fais un logout de l'appli 01 et que je vais sur une autre page de l'appli 02, elle me demande de me reloger et inversement.

    Je penses ne rien avoir oublié cette fois.

    Merci de l'aide.
    Ted

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Alors c'est la façon dont tu gère la session des 2 appli qui va pas.

    D'abord, quand tu fais un var_dump($_SESSION) il s'affiche les variables de la session, sont des données appartenant à la session.
    Une session est unique, tu peux obtenir sont identifant avec :
    - soit echo SID
    - soit echo session_id()

    Il n'y a donc pas besoin de différencier tes 2 appli avec :
    $_SESSION['appli_01'] ou $_SESSION['appli_02'], c'est inutile, et c'est là ton erreur.


    Dans ton cas il faut gérer les sessions de la façon suivante :
    (APPLI 01)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    session_name('appli_01');
    session_start();
    // On affecte des variables de sessions
    $_SESSION['id'] = $dbresult->t_id;
    $_SESSION['fname'] = $dbresult->t_fname;
    $_SESSION['lname'] = $dbresult->t_lname;
    (APPLI 02)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    session_name('appli_02');
    session_start();
    $_SESSION['id'] = $dbresult->t_id;
    $_SESSION['fname'] = $dbresult->t_fname;
    $_SESSION['lname'] = $dbresult->t_lname;
    On nomme la session avant de démarrer la session.
    Par défaut (si on nomme pas), son nom est PHPSESSION
    Dans l'absolu il n'est même pas utile de nommer (plutôt renommer) une session, mais il vaut mieux quand même car ça peut causer des problèmes sur un mutualiser.

    Et pour détruire une session lors d'un log out :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    session_start();
    .........
     
    $_SESSION = array();
    session_destroy();
    Quand tu code pour une appli, il n'y a pas a faire allusion sur une autre appli au niveau des sessions, c'est le serveur Web qui se charge de les différencier.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Merci, je vais tester cela de ce pas et je te tiens au courant.

    Merci,
    Ted

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Un grand merci, ça fonctionne super, je mets Résolu.

    Ted

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

Discussions similaires

  1. time out d'une session linux
    Par LOBO1986 dans le forum Administration système
    Réponses: 1
    Dernier message: 13/05/2013, 00h56
  2. [Session]maîtriser le time out de la session
    Par croquedur dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 23/10/2007, 10h57
  3. Déconnexion d'une session Win2k
    Par lamasse dans le forum C++Builder
    Réponses: 3
    Dernier message: 02/10/2003, 08h39
  4. Effet Fade In / Fade Out sur une surface DirectDraw
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 08/09/2002, 17h37

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