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 :

Perte de session aléatoire


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 36
    Points : 38
    Points
    38
    Par défaut Perte de session aléatoire
    Salut à tous,
    Je sais que le sujet à déja été abordé dans quelques topics, mais je n'ai pas trouvé de réponse qui convenait à mon cas, alors pour ne pas 'polluer' le topic des autres, je crées le mien ..

    Le problème est sensiblement le même :
    Je perds aléatoirement mes sessions, le problème c'est que je n'sais jamais quand ca va arriver c'est assez rare, et la plus part du temps ca arrive à mes utilisateurs, parfois très fréquemment.

    Le problème ne vient à priori pas du coté serveur car mon script a été testé sur plusieurs serveurs (2wamp et un apache sous fedora).

    Est ce que vous voyez dans cette portion de code quelque chose qui pourrait poser problème ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	session_name("xxx");
                    session_start();
    	if(time() - $_SESSION['timeout'] > 1800) // 1800 secondes = 30 min
    	{
    		session_destroy();
    		session_name("xxx");
    		session_start();
    	}
    	$_SESSION['timeout']=time();
    	if (!isset($_SESSION['logged_pleh']) or @$_SESSION['logged_pleh'] != "connecté")
    		die( '<script type="text/javascript">
    		window.location="index.php?ordre='.@$_GET['ordre'].'&page='.@$_GET['page'].'&comm='.@$_GET['comm'].'";
    		</script>');
    J'ai fait des test avec print_r($_SESSION) il semble que parfois la superglobale se vide d'une page à l'autre, pourtant le code est bien inclus dans chaque page de mon script, il n'y a aucun doute la dessus .... et bien evidemment la perte de session a lieu bien avant les 30 minutes du timeout

    J'espere que quelqu'un à déjà résolu ce genre de problème car je n'ai vu aucune réponse qui donnait une veritable solution dans d'autres posts

    Merci à vous

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 13
    Points : 13
    Points
    13
    Par défaut
    Dans la configuration de PHP est indiquée une durée d'expiration pour les sessions.
    Il se peut simplement que tes sessions expirent au bout de la durée spécifiée par le serveur si aucune page n'a été rechargée entre temps.
    Tu peux regarder du coté de session_cache_expire.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 36
    Points : 38
    Points
    38
    Par défaut
    Salut desolé j'été en congés ces 2 semaines, je me permet de remonter le topic

    Citation Envoyé par Rezouce Voir le message
    Il se peut simplement que tes sessions expirent au bout de la durée spécifiée par le serveur si aucune page n'a été rechargée entre temps.
    Tu peux regarder du coté de session_cache_expire.
    Le problème ne vient pas de la session.cache_expire est à 180 min, session.cookie_lifetime est à 0 (donc 'infini') et session.gc_maxlifetime est à 1440s.

    Le problème c'est que c'est vraiment aléatoire, des fois on se logge je fais 3 actions et la session saute. La plus part du temps ca marche bien, mais fréquemment, on se fait éjecter et je n'voies vraiment pas la raison ....

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Session aléatoire
    Bonjour,

    Je rencontre exactement ce problème actuellement.

    La session est perdue aléatoirement, parfois elle passe correctement d'autres fois pas du tout, impossible de trouver la règle qui régit ce bug.

    L'utilisateur se log avec son mail et son mot de passe, il arrive sur la première page mais ne peut accéder aux autres pages car il rencontre la page d'erreur.

    Voici seule procédure réalisable stable quand on rencontre la page d'erreur que j'ai trouvé :

    Vous êtes sur la page d'erreur alors que vous souhaitiez visiter une page :

    Cliquez sur le bouton retour de votre navigateur.
    Puis appuyez sur la touche F5 de votre clavier.
    Acceptez de renvoyer les informations.
    Vous devriez pouvoir consulter toutes les pages.

    Idem les sessions côté serveur sont ok :
    session.cache_expire est à 180 min,
    session.cookie_lifetime est à 0 (donc 'infini')
    session.gc_maxlifetime est à 1440s.

    Le serveur n'est pas plein.
    Le serveur ne semble pas endommagé.

    La session écrite en php est correctement écrite. En théorie, puisqu'elle a fonctionné 4 ans.

    Quelqu'un aurait trouvé ou aurait une piste ?

    Merci à tous,
    Killian

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 36
    Points : 38
    Points
    38
    Par défaut
    Salut kilian,

    Je n'sais pas quel version de apache tu utilises, perso a l'epoque ou j'avais ces problemes, nous étions sur easyphp, depuis nous sommes passé sous wamp et ca fonctionne.
    Le session_cache_expire fonctionne désormais correctement, je pense à un problème dans easyphp mais je n'peux pas l'assurer à 100 %.
    Cependant avec les memes fichier de config, cela marche désormais sur wamp mais easyphp lui est dans les choux, je n'voies que ca qui pourrait en etre une des raisons.

    Cdt

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Je te remercie pour ta réponse, toute aide est la bienvenue car mon problème est carrément sur le serveur de prod.

    Voici la version d'Apache : Apache/2.2.3 (Debian) PHP/4.4.4-8+etch6

    Le code d'authentification est assez simple et ne semble pas poser de problème en lui même :

    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
     
    <?php
    session_start();
    $validation=0;
     
    if(isset($_POST['email']) && isset($_POST['motdepasse'])){
      $_SESSION['email'] = $_POST['email'];
      $_SESSION['motdepasse'] = $_POST['motdepasse'];
      $sql="select USER_ID,EMAIL,MOTDEPASSE from S_USER where EMAIL='".$_SESSION['email']."' and MOTDEPASSE='".AddSlashes($_SESSION['motdepasse'])."' and ACTIF=1";
      $result = mysql_query($sql,$db);
      if ($myrow = mysql_fetch_array($result))
      {
        $validation=1;
        $user_id=$myrow['USER_ID'];
        $_SESSION['user_id']=$myrow['USER_ID'];
      }
    } else {
      if(isset($_SESSION['email']) && isset($_SESSION['motdepasse']) && isset($_SESSION['user_id'])){
        $sql="select USER_ID,EMAIL,MOTDEPASSE from S_USER where EMAIL='".$_SESSION['email']."' and MOTDEPASSE='".AddSlashes($_SESSION['motdepasse'])."' and ACTIF=1";
        $result = mysql_query($sql,$db);
        if ($myrow = mysql_fetch_array($result))
        {
          $validation=1;
          $user_id=$myrow['USER_ID'];
        }
      }
    }
    if ($validation==0){
      echo "Message d'erreur";
      exit;
    }
    ?>

    Le problème que j'évoque apparait après une migration des fichiers sur un autre nom de domaine (extension .net => .com) mais sur le même serveur.

    Une redirection web du .net est effective vers le .com

    Voili voilou...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 91
    Points : 62
    Points
    62
    Par défaut Pareil
    Je rencontre a peu près le même problème chez free, j'ai pourtant d'autres sites mais là ma session change de valeur mystérieusement et surtout elle prend la valeur d'une chose que je passe j'ai détecté dans quel fichier le problème était (ce n'était pas ce fichier)


    Problème réglé :

    J'utilisait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (isset($_SESSION['num']))
    {
    $chatakeur=$_SESSION['num'];
    et apres j'avais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $num=$_POST['numchatak'];
    donc il y avait confusion entre $num et $_SESSION['num']

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 91
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par killian_2008 Voir le message
    Je te remercie pour ta réponse, toute aide est la bienvenue car mon problème est carrément sur le serveur de prod.

    Voici la version d'Apache : Apache/2.2.3 (Debian) PHP/4.4.4-8+etch6

    Le code d'authentification est assez simple et ne pas poser de problème en lui même :

    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
     
    <?php
    session_start();
    $validation=0;
     
    if(isset($_POST['email']) && isset($_POST['motdepasse'])){
      $_SESSION['email'] = $_POST['email'];
      $_SESSION['motdepasse'] = $_POST['motdepasse'];
      $sql="select USER_ID,EMAIL,MOTDEPASSE from S_USER where EMAIL='".$_SESSION['email']."' and MOTDEPASSE='".AddSlashes($_SESSION['motdepasse'])."' and ACTIF=1";
      $result = mysql_query($sql,$db);
      if ($myrow = mysql_fetch_array($result))
      {
        $validation=1;
        $user_id=$myrow['USER_ID'];
        $_SESSION['user_id']=$myrow['USER_ID'];
      }
    } else {
      if(isset($_SESSION['email']) && isset($_SESSION['motdepasse']) && isset($_SESSION['user_id'])){
        $sql="select USER_ID,EMAIL,MOTDEPASSE from S_USER where EMAIL='".$_SESSION['email']."' and MOTDEPASSE='".AddSlashes($_SESSION['motdepasse'])."' and ACTIF=1";
        $result = mysql_query($sql,$db);
        if ($myrow = mysql_fetch_array($result))
        {
          $validation=1;
          $user_id=$myrow['USER_ID'];
        }
      }
    }
    if ($validation==0){
      echo "Message d'erreur";
      exit;
    }
    ?>

    Le problème que j'évoque apparait après une migration des fichiers sur un autre nom de domaine (extension .net => .com) mais sur le même serveur.

    Une redirection web du .net est effective vers le .com

    Voili voilou...
    On voit bien que tu dois avoir mon problème
    doit y'avoir confusion entre $_SESSION['email'] et $_POST['email']

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Points : 7
    Points
    7
    Par défaut PHPSESSID
    Je te remercie je vais voir si ça règle le problème et te tiens au courant.

    Ce qui se passe c'est que ce code fonctionnait avant la migration.
    Ce qu'on peut juste constater, c'est que le PHPSESSID ne s'implémente pas lors de la connexion.
    C'est seulement après renvoi des paramètres que le PHPSESSID s'initialise en cookie.

    Certains développeurs pensent qu'il peut s'agir d'un problème de disque. Certains administrateurs de serveurs pensent qu'il s'agit d'un problème de script.

    J'ai testé cette variante de script : aucun résultat.

    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
     
    <?php
    session_start();
    $validation=0;
     
    if(isset($_POST['email']) && isset($_POST['motdepasse'])){
      $sql="select USER_ID,EMAIL,MOTDEPASSE from S_USER where EMAIL='".$_POST['email']."' and MOTDEPASSE='".addslashes($_POST['motdepasse'])."' and ACTIF=1";
      $result = mysql_query($sql,$db);
      if ($myrow = mysql_fetch_array($result)) {
        $validation=1;
     
    	$_SESSION['email'] = $myrow['EMAIL'];
    	$_SESSION['motdepasse'] = $myrow['MOTDEPASSE'];
        $_SESSION['user_id'] = $myrow['USER_ID'];
     
    	header('Location:?PHPSESSID=' . session_id());
      }
    } 
    else if(isset($_SESSION['email']) && isset($_SESSION['motdepasse']) && isset($_SESSION['user_id'])){
    	$validation = 1;
    	$user_id = $_SESSION['user_id'];
    }
     
    //---------- a enlever si tout va bien
    echo '<!--';
    var_dump($_POST);
    var_dump($_SESSION);
    var_dump($_COOKIE);
    echo '-->';
    //----------
     
    if ($validation==0){
      echo "Message d'erreur";
      exit;
    }
    ?>

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Autres pistes trouvées sur le web
    J'ajoute ici des pistes trouvées ici et là sur le web :

    Utiliser session_write_close() avant la redirection
    ou
    setcookie(), si vous ne voulez pas rencontrer de message d'erreur.
    ou
    deux session_start s'annulent parfois
    ou
    setcookie('PHPSESSID',session_id())

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Solution intermédiaire
    Pour ceux qui rencontrerais le problème :

    Modifier le php.ini Mettre session.auto_start sur on (fichier modifiable via ssh avec putty par exemple) Redémarrer apache

    Le PHPSESSID s'initialise dés que l'utilisateur arrive sur le site. Ce qui permet lors de son login de recevoir les paramètres (variables).

    Je pense que ce n'est pas la solution idéale mais sur un site en production j'aurais préféré avoir ce conseil pour l'appliquer immédiatement.

    Donc maintenant l'info existe.

    J'ai cru constater que l'heure de modification des logs de session était +1h d'où est ce que ça peut venir ce problème ?

    Avis aux amateurs...

Discussions similaires

  1. [PHP 5.2] Perte immédiate de session aléatoire
    Par Dark Cid dans le forum Langage
    Réponses: 1
    Dernier message: 08/10/2010, 09h46
  2. Plantages et perte de session aléatoires
    Par sendoshi dans le forum Seam
    Réponses: 5
    Dernier message: 08/04/2009, 17h31
  3. Perte des variables de session aléatoire
    Par dnkz dans le forum Langage
    Réponses: 1
    Dernier message: 25/04/2008, 16h27
  4. [JSP][session] perte de session et sendRedirect
    Par blaz dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 30/03/2007, 09h32
  5. [VB.NET] Perte de session entre 2 projets
    Par TekP@f dans le forum ASP.NET
    Réponses: 3
    Dernier message: 02/05/2005, 09h12

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