OVH Community, votre nouvel espace communautaire.

Problème authentification php


Hydro
30/10/2013, 10h58
Merci beaucoup !

Par contre j'obtiens

Fatal error: Call to a member function query() on a non-object
Pour cette ligne :

Code PHP:
if ($result $mysql->query("SELECT id FROM users WHERE login='$login' AND pass='$pass'")) 

Alex.P
08/10/2013, 09h48
2/ J'ai mi print_r($_SESSION); dans le fichier mais il se passe rien de spécial.
Ok, c'est que ta session n'est pas initialisé.

Je remarque que dans header.php tu ne fais pas de "session_start()".

Etant donnée que tu vas touché aux sessions tu dois appeler cette méthode en début de fichier. ( Apres c'est peut etre un simple oublie dans le copier/coller du code ? )

Sinon voici ton code en php5.4 ( autant etre à jour ) et sécuisé !

Login.php
Code:
escape_string( $pass );
            $login = $mysqli->escape_string( $login );

            if ($mysqli->connect_errno)
            {
                // Erreur de connexion a la base de données ... on retourne une erreur
            }
            else
            {
                // On envoie la requete

                if ($result = $mysql->query("SELECT id FROM users WHERE login='$login' AND pass='$pass'"))
                {
                    if ($result->new_rows == 1)
                    {
                        // Plusieurs utilisateur avec le meme mot de passe / user c'est possible ? 

                        $_SESSION['isLogged'] = 1;
                    }

                    // on libere le resultat
                    $result->close();
                }

                // on oublie pas de fermer la connexion sql si elle ne sert plus a rien
                $mysqli->close();
            }
        }
    }

    // On verifie que la session est initialisé 
    if (isset($_SESSION) && isset($_SESSION['isLogged']))
    {
        // oui la session est initialisé
        // on redirige le client vers la page demandé ou le contenu

        // Note : on peut également afficher le contenu ici

        header("location: login_return.php");
    }
        // On affiche le formulaire de connexion
        // On peut également afficher les erreurs du formulair
        // Pour aller plus vite on insert le form dans le code 
?>
    
login_return.php
Code:
Alex.P

Hydro
08/10/2013, 09h47
Du coup je pense sa vient plus d'un problème au niveau des variables de sessions qui se transmettent pas d'une page à l'autre mais je vois pas ou

Hydro
07/10/2013, 17h53
1/ A priori oui j'ai mi la petite ligne dans le htaccess (avant isLogged fonctionnait pas du tout)

2/ J'ai mi print_r($_SESSION); dans le fichier mais il se passe rien de spécial.


Concernant ta remarque sur la variable session je dois t'avouer que je m'y connais pas plus que sa en php. Du coup j'ai suivi un tuto pour sécuriser au max l'accès à l'espace client.

Après je suis ouvert à toutes idées pour améliorer sa.

Alex.P
07/10/2013, 17h42
1/ Es-tu bien en php5 ou supérieur ? ( pour etre sur )
2/ Que t'affiche un print_r($_SESSION); dans la fonction isLogged

A Placer avant cette ligne de code ou dans un else

Code:
if(isset($_SESSION['Auth']) && isset($_SESSION['Auth']['login']) && isset($_SESSION['Auth']['pass']))
Sinon pourquoi ne pas mettre une variable dans ta session comme par exemple $_SESSION['isLogged'] une fois que le client s'est correctement authentifier plutot que de vérifier à chaque fois en base de données si le mot de passe & user est correct ?

=> Cela te permettra de laisser souffler un peu ta base de données
=> la fonction isLogged devriendra plus simple ( Attention à la sécurité )

Alex.P

Hydro
07/10/2013, 17h29
Bonsoir,

Voila j'ai crée un site en local avec une partie nécessitant un login + mdp.

En local tout le processus d'identification fonctionne, par contre une fois sur OVH j'ai l'impression que ma variable SESSION ne fonctionne pas.

Le code header.php :

Code PHP:
if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])){
    
extract($_POST);
    
$pass sha1($pass);


    
mysql_connect("xxxx","xxxx","xxxx");
    
mysql_select_db("xxxx");
    
$sql " SELECT id FROM users WHERE login='$login' AND pass='$pass'";
    
$req mysql_query($sql) or die(mysql_error());
    if(
mysql_num_rows($req)>0){
        
$_SESSION['Auth'] = array(
        
'login' => $login,
        
'pass' => $pass
        
);
        
header('Location:espace_client.php'); 
Le code espace_client.php :

Code PHP:
session_start();
require(
"auth.php");
if(
Auth::isLogged()){

}else{
    
header('Location:index.php');
}

    
mysql_connect("xxxx","xxxx","xxxx");
    
mysql_select_db("xxxx");
                                
$recup_info "SELECT *
                                                    FROM users
                                                    WHERE login = '"
.$_SESSION['Auth']['login']."';";
                                
$res_info mysql_query($recup_info)or die("Erreur : ".$recup_info);
                                
$ligne_info mysql_fetch_assoc($res_info);
                                
$login $ligne_info['login']; 
Le code auth.php :

Code PHP:

Class Auth{
 static function 
isLogged(){

     if(isset(
$_SESSION['Auth']) && isset($_SESSION['Auth']['login']) && isset($_SESSION['Auth']['pass'])){
             
extract($_SESSION['Auth']);
              
mysql_connect("xxxx","xxxx","xxxx");
    
mysql_select_db("xxxx");
            
$sql " SELECT id FROM users WHERE login='$login' AND pass='$pass'";
            
$req mysql_query($sql) or die(mysql_error());
                    
                    if(
mysql_num_rows($req)>0){
                        return 
true;
                    }else{ 
                        return 
false;
                    }
             }else{ 
                return 
false;
            }
    }
}
?>
Donc je tape bon login + mdp et je me retrouve sur index.php donc ma fonction isLogged a retourné false. Mais en local cela fonctionne bien.

J'ai essayé d'appeler une page test.php après header.php avec :

Code PHP:
session_start();
$login $_SESSION['Auth']['login'];
echo 
$login;
?>
Et elle reste vide. Le problème vient-il des variables SESSION ? ou de la fonction isLogged ?


Merci