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 :

Probleme avec les sessions.


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Points : 28
    Points
    28
    Par défaut Probleme avec les sessions.
    Bonjour.

    J essaie de faire une ptite page statistique sur mes pages mais je rencontre un probleme avec les sessions.


    Quand un utilisateur s authentifie , j' enregistre le session_id() avec plin d autre info dans une table statistique.
    Si l utilisateur ferme son navigateur , la pas de probleme , quand il se reconnect , il y a une nouvelle id de session .
    Par contre si l utilisateur clik sur " se deconnecter" et qu il se reconnect , il garde la meme id de session.

    Quand l utilisateur clik sur " se deconnecter " je l envoi sur une page logout.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    // On appelle la session
    session_start();
     
    // On écrase le tableau de session
    $_SESSION = array();
     
    // On détruit la session
    session_unset();
    session_destroy();
     
    header("Location: http://" . $_SERVER['HTTP_HOST'] . "/site test/index.php");	
    ?>
    J ai lu que session_destroy() detruisait toute les variables de la session mais elle ne le fait pas.

    Si vous savez comment m aider... merci par avance

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    Je viens de trouver un autre souci . Si l utilisateur A se deconecte et qu un utilisateur B se connecte de suite après , il garde le meme SID que A .
    Chelou ...

  3. #3
    Membre actif
    Inscrit en
    Septembre 2005
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 185
    Points : 220
    Points
    220
    Par défaut
    Slt , envoie le code complet
    la succession d'évènement que nous subissons toute notre vie n'est qu'un phénomène de compensation dont la nature en est l'arbitre.[Inéluctabilité de la nature ] Polace

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    Lorsque l utilisateur se connect :
    la page verif.php:

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    <?php
    include('connectdb.php');
     
    // On démarre la session
     session_start();
    $loginOK = false;  // cf Astuce
     
    // On n'effectue les traitement qu'à la condition que
    // les informations aient été effectivement postées
    if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['mdp'])) ) {
    	$login = $_POST['login'] ;
     
      // On va chercher le mot de passe afférent à ce login
      $sql = "SELECT id,civilite,nom,prenom,fonction,id_client,id_part,login, motdepasse FROM contacts WHERE login = '".addslashes($login)."'";
     
      $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
      $num = mysql_num_rows($req);
     
      // On vérifie que l'utilisateur existe bien
      if ($num > 0) {
     
         $row = mysql_fetch_assoc($req);
     
        // ' login trouvé ...' ;
        // On vérifie que son mot de passe est correct
    	$mdp = $_POST['mdp'];
     
        if ($mdp == $row['motdepasse']) {
          $loginOK = true;
        }
      }
    }
     
    // Si le login a été validé on met les données en sessions
    if ($loginOK) {
      $_SESSION['id'] = $row['id'];
      $_SESSION['civilite'] = $row['civilite'];
      $_SESSION['nom'] = $row['nom'];
      $_SESSION['prenom'] = $row['prenom'];
      $_SESSION['fonction'] = $row['fonction'];
      $_SESSION['id_client'] = $row['id_client'];
      $_SESSION['id_part'] = $row['id_part'];
      $_SESSION['login'] = $row['login'];
      $_SESSION['premiereco'] = time();
      $_SESSION['connecte'] = true ;
     
      //on redirige vers le main ... 
     	header("Location: http://" . $_SERVER['HTTP_HOST'] . "/site test/main.php");
     
    }
    else {
      header("Location: http://" . $_SERVER['HTTP_HOST'] . "/site test/index.php");
    }
    ?>


    ca le stat.php

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    <?php
    // connexion a la bdd
    include('connectdb.php');
     
    // on ouvre la session
    session_start();
     
    if(!isset($_SESSION['parcours']))
    {
    	// il s'agit d'un nouveau visiteur
     
     
    	// on crée $_SESSION['parcours'] et $_SESSION['time']
    	$_SESSION['time'] = time();
    	$_SESSION['parcours']= $_SERVER['REQUEST_URI'];
    	$time = $_SESSION['time'];
    	$parcours=$_SESSION['parcours'];
     
     
     
    	// ON CRÉE UN ENREGISTREMENT DANS LA TABLE
    	//  champs referer :  pour savoir d ou l utilisateur est arrivé sur le site
    	//  parcours            : le cheminement des pages qu a parcouru l utilisateur 
    	// sessid                  : session_id()
    	// user                     : le nom d utilisateur
    	// time                     : le temps resté sur chaque page , le champs time est un entier qui represente le nombre de seconde depuis la date reference ( 1970 ...... )
    	//$sql = "INSERT INTO statistique (referer,parcours,sessid,user,time)";
    	$sql = "INSERT INTO statistique (sessid,referer,parcours,id_contact,time,id_partenaire,id_client)";
    	echo $sql .= "VALUES ('".session_id()."','".$_SERVER['HTTP_REFERER']."','".$parcours."',
    		'".$_SESSION['id']."','".$time."','".$_SESSION['id_part']."','".$_SESSION['id_client']."')";
    }
    else
    {
    	//utilisateur deja connecté au site
    	// on ajoute la nouvelle page vue, séparée par un point virgule, à la variable de session
    	$_SESSION['parcours'] .= '; '.$_SERVER['REQUEST_URI'];
     
    	// on ajoute à la variable de session l'heure à laquelle la page a été vue
    	$_SESSION['time'] .= '; '.time();
     
    	// ON MET LA TABLE À JOUR
    	$parcours = $_SESSION['parcours']; 
    	$time = $_SESSION['time'];
     
     
    	$sql = "UPDATE statistique SET parcours='".$parcours."' , time='".$time."' ";
    	echo $sql .= "WHERE sessid='".session_id()."' AND id_contact ='".$_SESSION['id']."'";
    }
    mysql_query($sql) or die('erreur'.$sql);
    sur toute mes page je fait un include('stat.php')

    Sur la page main.php , lorqu on clik sur deconnexion on appelle la page logout.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    // On appelle la session
    session_start();
     
    // On écrase le tableau de session
    $_SESSION = array();
     
    // On détruit la session
    session_unset();
    session_destroy();
     
    header("Location: http://" . $_SERVER['HTTP_HOST'] . "/site test/index.php");
    Voila j espere que ca pourra vous aider.

  5. #5
    Membre actif Avatar de allyson
    Inscrit en
    Août 2003
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 261
    Points : 272
    Points
    272
    Par défaut
    session_start() au tout début de la page!!!
    .: and Justice for all :.
    ------------------------------------------------------------
    Membre du jury de l'élection de Mister DVP.com
    les règles du forum
    de penser au tag

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par allyson
    session_start() au tout début de la page!!!
    Désolé je comprend pas.

  7. #7
    Membre actif Avatar de allyson
    Inscrit en
    Août 2003
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 261
    Points : 272
    Points
    272
    Par défaut
    tu devrais mettre ton session_start() avant tes include
    .: and Justice for all :.
    ------------------------------------------------------------
    Membre du jury de l'élection de Mister DVP.com
    les règles du forum
    de penser au tag

  8. #8
    Membre actif Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Points : 224
    Points
    224
    Par défaut
    Salut,

    A priori, il le fait puisqu'il inclut "stat.php" sur chacune de ses page et que cette page contient "session_start"
    il ne faut pas de tout pour faire un monde. Il faut du bonheur et rien d'autre. Paul Eluard
    Des fois ça malche, des fois ça malche pas. Garcimore

  9. #9
    Membre actif Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Points : 224
    Points
    224
    Par défaut
    Ou alors tu veux dire que "sessions_start()" doit impérativement être la première ligne de code des page, avant quoi que se soit d'autre ?
    il ne faut pas de tout pour faire un monde. Il faut du bonheur et rien d'autre. Paul Eluard
    Des fois ça malche, des fois ça malche pas. Garcimore

  10. #10
    Membre actif Avatar de allyson
    Inscrit en
    Août 2003
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 261
    Points : 272
    Points
    272
    Par défaut
    Citation Envoyé par Ricou13
    Ou alors tu veux dire que "sessions_start()" doit impérativement être la première ligne de code des page, avant quoi que se soit d'autre ?
    il doit être mis avant les echo et les envois d'entêtes ...
    .: and Justice for all :.
    ------------------------------------------------------------
    Membre du jury de l'élection de Mister DVP.com
    les règles du forum
    de penser au tag

  11. #11
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    Ok certes il doit etre mis avant. Le probleme n est pas mais sur le fait que quand on se deconnect puis on se reconnect sans avoir fermé le navigateur , la session_id reste la meme quel que soit l utilisateur sur le meme poste.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    j ai trouvé une solution bourrin.

    Je test dans la base si le sessid existe pas deja . Si il existe je fait un session_regenerate_id();

    En esperant que ca ne fasse pas tro ramer le serveur quand la base sera bien grande ...

  13. #13
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    SAlut kilanepa,

    ce probleme m'est deja arrive, et comme d'autres avant moi te l'on écrit le probleme venait du fait que la session etait crée (par session_start) mais après l'envoi d'autres infos au browser comme les includes.
    J'étais tellement persuade qu'il ne faisait rien avant l'ouverture de session, que j'ai perdu beaucoup de temp sur des solutions bourrin (dsl).
    Pour parer le probleme, je developpe avec firefox et certains pllugins TROP UTILE comme http-headers (je crois) qui affiche justement les entêtes de page php. (note ce sont des infos non-affichées par le browser).

    Bref, faut jeter un coup d'oeil aux plugins additionnels que propose firefox pour les developpeurs sur son site.

    bon dev'
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    Merci beaucoup tigunn . Jvais aller regarder ca.

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

Discussions similaires

  1. Probleme avec les sessions PHP
    Par johnson95 dans le forum Langage
    Réponses: 2
    Dernier message: 04/12/2006, 13h32
  2. probleme avec les sessions
    Par BernardT dans le forum Langage
    Réponses: 2
    Dernier message: 22/09/2006, 16h21
  3. probleme avec les session et php5
    Par stephcache dans le forum Langage
    Réponses: 5
    Dernier message: 08/06/2006, 18h34
  4. Probleme avec les sessions
    Par phpaide dans le forum Langage
    Réponses: 6
    Dernier message: 22/05/2006, 18h37
  5. Probleme avec les sessions
    Par Manio 54 dans le forum Langage
    Réponses: 6
    Dernier message: 07/12/2005, 14h10

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