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 :

Login impossible parfois [PHP 4]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Par défaut Login impossible parfois
    Bonjour,

    J'ai fait un petit site avec sessions et sans cookie.
    A première vue, le site et la gestion des sessions fonctionnent bien.
    Un session_start() est placé à chaque début de fichier.

    Cependant, certains utilisateurs me font remonter des problèmes que je n'arrive pas à expliquer :
    le user se logue, il navigue... tout va bien. Et à un moment (aléatoire), il perd sa session et ne peut plus se reloguer.
    Le même phénomène peut arriver pour un utilisateur qui arrive sur le site. Il entre son login/pwd mais cela ne fonctionne pas. Or les login/pwd sont bons et il est possible de se loguer avec cet utilisateur depuis une autre machine !

    Pour info, cela peut se produire sur n'importe quelle machine et n'importe quel navigateur.

    Est-ce que ce phénomène vous fait penser à quelque chose ? Un bug de codage, etc....

    Merci pour votre aide
    Rédacteur et Modérateur rubriques Linux et Virtualisation
    Mes Articles
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
    N'oubliez pas de consulter les FAQ virtualisation et les cours et tutoriels Virtualisation
    Man pages en français

  2. #2
    Membre émérite Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Par défaut
    Bonjour

    J'ai procédé à de nombreux tests sur les navigateurs courants, ou les plus populaires selon, et je n'ai pas rencontré de problèmes particuliers.

    ==> Aparté : la "machine" n'a rien à voir, c'est le navigateur qui interprète les variables serveur.
    Ceci étant rectifié, le cas de figure cité peut pourtant se présenter dans les cas suivants :

    - Double ouverture du navigateur et depuis la même "machine".
    En effet, le fait de se ré-identifier alors que c'est déjà fait dans une autre fenêtre peut créer un conflit.

    Logique d'une certaine façon, puisqu'un script, quand il est élaboré correctement, doit détecter si une session est déjà ouverte pour un X utilisateur.
    Il ne faut pas oublier qu'une session est détruite lors de la fermeture du navigateur, et par conséquent elle demeure tant que l'utilisateur n'a pas décidé de la quitter.

    - Ensuite, il est possible aussi que la session soit détruite au bout d'un x temps. Si l'utilisateur laisse le site, ou l'applicatif pendant un certain laps de temps sans activité, elle sera détruite.
    L'utilisateur devra se reconnecter et s'identifier de nouveau.

    Par contre, là ce n'est pas très clair :
    .......tout va bien. Et à un moment (aléatoire), il perd sa session et ne peut plus se reloguer....
    Et bien, je dis que c'est impossible.
    Si une session est détruite, l'utilisateur a la faculté d'en relancer une en s'identifiant, et par conséquent de pouvoir se reloguer sans souci.
    Ça, c'est clair et assuré.

    ==> Ou alors la session n'est pas détruite dans sa totalité, et une/des variables en cours l'empêche de se reloguer.

  3. #3
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Par défaut
    Merci pour ta réponse.

    C'est exactement ca quand je dis qu'à un moment aléatoire, l'utilisateur perd sa session et ne peut plus se reloguer. C'est ca qui est très étrange !!!

    Ce n'est pas une question d'expiration puisque l'on peut être déconnecté en pleine utilisation du site, sur un changement de page par exemple.

    Voici la config du php.ini (sachant que mon hébergeur ne me donne pas accès au fichier) :
    Session Support enabled
    Registered save handlers files user

    Directive Local Value Master Value
    session.auto_start Off Off
    session.bug_compat_42 On On
    session.bug_compat_warn On On
    session.cache_expire 180 180
    session.cache_limiter nocache nocache
    session.cookie_domain no value no value
    session.cookie_lifetime 0 0
    session.cookie_path / /
    session.cookie_secure Off Off
    session.entropy_file no value no value
    session.entropy_length 0 0
    session.gc_divisor 100 100
    session.gc_maxlifetime 1440 1440
    session.gc_probability 1 1
    session.name PHPSESSID PHPSESSID
    session.referer_check no value no value
    session.save_handler files files
    session.save_path /tmp /tmp
    session.serialize_handler php php
    session.use_cookies On On
    session.use_only_cookies Off Off
    session.use_trans_sid On On
    Rédacteur et Modérateur rubriques Linux et Virtualisation
    Mes Articles
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
    N'oubliez pas de consulter les FAQ virtualisation et les cours et tutoriels Virtualisation
    Man pages en français

  4. #4
    Membre émérite Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Par défaut
    A mon avis, rien à voir avec la config de php.ini.
    Les paramétres ne sont pas définis pour créer de l'aléatoire.

    Hum...et je serais plutôt inquiet... et je laisserais tomber sur le champ le système de session php.

    Je note aussi dans le titre [PHP4].
    Peut-être une piste à explorer.

    Ceci étant et à défaut de sources qui montre comment est élaborée cette session, c'est avancer à l'aveuglette. ( ?)

  5. #5
    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
    Par défaut
    Salut

    Peut être une piste, c'est on jamais.
    De mon coté j'ai ceci :
    session.use_only_cookies On
    session.use_trans_sid 0

    Théoriquement il est mieux de faire comme ci dessus.
    Particulièrement le use_trans_sid (0) car à On Php va rajouter l'ID de session dans l'URL.
    C'est théoriquement un manque de sécurité.
    Ca peu aussi être l'origine de l'erreur si pour X raison l'ID n'est pas transmis.
    D'ailleurs, est ce que tes URLs contiennent l'ID de session ? (-http://.../index.php?PHPSESSID=azertyuiop)

    Mais je connais très mal Php4, je ne sais pas si une telle config serait souhaitable.

    Aussi, le nom de la session est celle par défaut : PHPSESSID
    Lui donner un autre nom serait pas plus mal, ça mange pas d'pain.
    Pour ça, suffit de le redéfinir avant de démarrer la session : (dans toutes le pages ayant un session_start();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    session_name('LAVAZAVIOSID');
    session_start();

    Ceci dit, les comportement aléatoires et en plus liés aux sessions c'est déjà compliqué, mais aider sur un forum c'est presque mission impossible.

  6. #6
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Par défaut
    Re,

    Je n'utilise pas les cookies mais juste les sessions.

    Citation Envoyé par RunCodePhp
    D'ailleurs, est ce que tes URLs contiennent l'ID de session ? (-http://.../index.php?PHPSESSID=azertyuiop)
    Non, les URLs sont des URLs "classiques", avec juste le nom du fichier en cours d'exécution.

    Citation Envoyé par RunCodePhp
    Pour ça, suffit de le redéfinir avant de démarrer la session : (dans toutes le pages ayant un session_start();
    J'avais essayé, suite à ce comportement, de définir un session_name que j'avais appelé à chaque début de fichier avant le session_start mais cela faisait planter mes sessions : impossible de me connecter

    Voici comment je gère mes sessions :
    Code php : 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
    <?php
    //initialisation de la session
    session_start();
     
    include('./functions/verification_login_passwd.php');
    include('./functions/infos_utilisateur.php');
     
    // Test de l'envoi du formulaire
    if(!empty($_POST)) {
     
    	// Les identifiants sont transmis ?
    	if(isset($_POST['login']) && isset($_POST['password'])) {
     
    		//On récupère les identifiants
    		$login_tape = $_POST['login'];
    		$passwd_tape = $_POST['password'];
     
    		//On teste si le mot de passe est valide
    		if (verification_login_passwd($login_tape, $passwd_tape)) {
    			//On récupère des infos sur l'utilisateur
    			infos_utilisateur($login_tape);
    		}
    	}
    }
    ?>

    le contenu de functions/verification_login_passwd.php :
    Code php : 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
    <?php
     
    function verification_login_passwd($log,$pass){
     
    	//Connexion à la base de données
    	include('./include/connexion_db.inc.php');
     
    	//Récupération du Hash MD5 du mot de passe tapé
    	$pass_md5 = md5($pass);
    	$sql = sprintf("SELECT * as nbre FROM user WHERE user_login = '%s' AND user_pwd = '%s'", mysql_real_escape_string($log), mysql_real_escape_string($pass_md5));
     
    	//Execution de la requete SQL
    	$result = mysql_query($sql);
     
    	if (mysql_num_rows($result) != 1)
    	{
    		mysql_close();
       		exit();
    	}
     
    	while($row = mysql_fetch_assoc($result))
    	{
    		if($row['nbre'] == 1)
    		{
    			return TRUE;
    		}
    		else
    		{
    			return FALSE;
    		}
    	}
    	mysql_close();
    }
    ?>

    et le contenu de functions/infos_utilisateur.php :
    Code php : 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
    <?php
     
    //Connexion a la base
    include('./include/connexion_db.inc.php');
     
    function infos_utilisateur($login_sql){
    	global $_SESSION;
     
    	//On récupère donc les données sur l'utilisateur
    	$sql_utilisateur = sprintf("SELECT user_id, user_nom, user_prenom, user_email FROM user WHERE user_login = '%s'", mysql_real_escape_string($login_sql));
    	$result = mysql_query($sql_utilisateur);
    	if (mysql_num_rows($result) != 1)
    	{
    		exit();
    	}
    	while($infos_utilisateur = mysql_fetch_array($result))
    	{
    		$_SESSION['user_id'] = $infos_utilisateur['user_id'];
    		$_SESSION['login'] = $infos_utilisateur['user_login'];
    		$_SESSION['nom'] = $infos_utilisateur['user_nom'];
    		$_SESSION['prenom'] = $infos_utilisateur['user_prenom'];
    		$_SESSION['email'] = $infos_utilisateur['user_email'];
    	}
    	mysql_close();
    }
    ?>

    Ca, c'est pour la page de login. Sur les autres pages, je fais un simple session_start();
    Rédacteur et Modérateur rubriques Linux et Virtualisation
    Mes Articles
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
    N'oubliez pas de consulter les FAQ virtualisation et les cours et tutoriels Virtualisation
    Man pages en français

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

Discussions similaires

  1. login impossible sur openbsd
    Par retraitequirame dans le forum BSD
    Réponses: 3
    Dernier message: 18/04/2013, 13h01
  2. FortiGate 60 [Login impossible]
    Par Technix59 dans le forum Hardware
    Réponses: 3
    Dernier message: 22/01/2009, 13h08
  3. Des logins impossibles
    Par hellboy20 dans le forum Administration
    Réponses: 4
    Dernier message: 25/04/2007, 03h03
  4. Login impossible
    Par trattos dans le forum Administration système
    Réponses: 3
    Dernier message: 27/02/2006, 17h03
  5. [REDHAT] Login impossible
    Par chicobra dans le forum RedHat / CentOS / Fedora
    Réponses: 3
    Dernier message: 11/09/2004, 11h27

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