Aller au contenu

Problème de session


Garfield

Sujets conseillés

Bonjour,

Voila mon problème, je débute en php et je voudrais faire un espace membre. Pour cela, aprés des recherches, il est conseillé d'utiliser les "sessions".

J'ai donc fait ceci mais ca ne parche pas :

<?php
include("conf.php);
// Controle
if($_POST["login"] != "" && $_POST["pass"] != "")
{
$username = $_POST["login"];
$password = sha1($_POST["pass"]);

// Connexion au serveur mysql
$connexion = mysql_connect($mysql_link,$mysql_user,$mysql_password);
mysql_select_db('forum',$connexion);

// Récupération des données de la table
$sql = "select * from users WHERE username='$login' AND password='$password'";

// Envoi
$requete = _AT_mysql_query($sql, $connexion) or die($sql."<br>".mysql_error());

// On récupère le résultat
$result = mysql_fetch_object($requete);

// Si la requête s'est bien passée
if(is_object($result))
{
// Début de la sessions
session_start();

// Enregistrement d'une variable de session
$_SESSION['login'] = $username;
header('Location: page1.php');
}
else {
header('Location: index.php');
}
}
// Fermeture
mysql_close();
?>

La page reste désesperément blanche. Je pense qu'il manque déja des "or die" mais je ne sais déja pas trop où les mettre. Si quelqu'un pouvait m'aider et m'expliquer mon erreur, svp ! Merci

Lien vers le commentaire
Partager sur d’autres sites

Tu as déjà une erreur en première ligne :

include("conf.php); à remplacer par include('conf.php');

Sinon tu peux remplacer :

// Récupération des données de la table

$sql = "select * from users WHERE username='$login' AND password='$password'";

// Envoi

$requete = _AT_mysql_query($sql, $connexion) or die($sql."<br>".mysql_error());

par

// Récupération des données de la table + Envoi

$requete = mysql_query("SELECT username FROM users WHERE username = "'.mysql_real_escape_string($login).'" AND password = "'.mysql_real_escape_string($password).'"");

Tout en haut de ta page PHP, tu peux ajouter ces 2 lignes pour tester ton code :

@ini_set('display_errors',1);

error_reporting(E_ALL);

Elles te retourneront les éventuelles erreurs, au lieu d'une page blanche.

Autres suggestions... remplacer :

if($_POST["login"] != "" && $_POST["pass"] != "") par if(isset($_POST['login']) && !empty($_POST['login']) && isset($_POST['pass']) && !empty($_POST['pass']))
mysql_close(); par mysql_close($connexion);

$connexion = mysql_connect($mysql_link,$mysql_user,$mysql_password);

mysql_select_db('forum',$connexion);

par

$connexion = mysql_connect($mysql_link,$mysql_user,$mysql_password);

$db_selected = mysql_select_db('forum',$connexion);

if(!$db_selected){

die('Impossible de séctionner la base de donnée.');

}

Cela évitera d'afficher des infos sur ta requete SQL au cas ou ta base de données serait innaccessible...

Modifié par Sammuel
Lien vers le commentaire
Partager sur d’autres sites

Okay, j'ai donc modifié comme ceci :

<?php
@ ini_set('display_errors',1);
error_reporting(E_ALL);

include('conf.php');
// Controle
if(isset($_POST['login']) && !empty($_POST['login']) && isset($_POST['pass']) && !empty($_POST['pass']))
{
$username = $_POST["login"];
$password = sha1($_POST["pass"]);

// Connexion au serveur mysql
$connexion = mysql_connect($mysql_link,$mysql_user,$mysql_password);
$db_selected = mysql_select_db('forum',$connexion);

if(!$db_selected){
die('Impossible de séctionner la base de donnée.');
}

// Récupération des données de la table + Envoi
$requete = mysql_query("SELECT username FROM users WHERE username = "'.mysql_real_escape_string($login).'" AND password = "'.mysql_real_escape_string($password).'"");

// On récupère le résultat
$result = mysql_fetch_object($requete) or die($sql."<br>".mysql_error());

// Si la requête s'est bien passée
if(is_object($result))
{
// Début de la sessions
session_start();

// Enregistrement d'une variable de session
$_SESSION['login'] = $username;
header('Location: index.php');
}
else {
header('Location: erreur.php');
}
}
// Fermeture
mysql_close($connexion);
?>

Et j'ai toujours une page blanche :s

J'ai tester avec $username à la place de $login dans

WHERE username = "'.mysql_real_escape_string($login).'"

rien non plus :wacko:

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Tu peux peut-être compter le nombre d'enregistrements renvoyés par ta requète grace à la fonction mysql_num_rows().

En gros tu fais un

if (mysql_num_rows($requete) > 0)

pour vérifier que tu as des résultats.

Tu peux aussi utiliser la fonction mysql_error()

Lien vers le commentaire
Partager sur d’autres sites

En PHP, quand ca ne fonctionne pas, il suffit de faire des tests à différents niveaux du code.

Faire un test comme NorSeb t'a indiqué par exemple !

Ou sinon, tu fais un :

echo "SELECT username FROM users WHERE username = "'.mysql_real_escape_string($login).'" AND password = "'.mysql_real_escape_string($password).'"";

Tu sélectionnes la ligne de code que ca affiche, et tu testes directement dans PHPmyadmin, dans l'onglet 'SQL'.

Et tu regardes si ca te retourne ou non un enregistrement.

Modifié par Sammuel
Lien vers le commentaire
Partager sur d’autres sites

sha-1 est censé être plus sûr.

Pour ton programme, si tu cherches à faire de la sécurité :

- utilises un grain de sel que toi seul puisse connaitre :

$password = sha1($_POST["pass"]."pluriels");

- de la même manière, il faut crypter ta session pour éviter le vol de session

- tu peux aussi vérifier l'ip ou le host distant ainsi que le navigateur.

si l'ip ou le navigateur change en cours de session, c'est que quelqu'un tente de récupérer la session d'un autre

Modifié par pluriels
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...