Pb session de débutant

Pb session de débutant - PHP - Programmation

Marsh Posté le 23-11-2005 à 17:34:27    

C'est encore Wewen1 qui bataille.
 
J'essaie depuis 4 heures de coder des sessions dans mon espace client et je merde complet.
 
Voici comment marche mon script:
index.php contient form d'identification >> test des login et password grâce à ficher indépendant login.php >> si ok >> default.php, si pas ok >> connexion_erreur.php
 
Où doit-on commencer les sessions ?
 
Pour l'instant je les lance dans login.php sous cette forme:

Code :
  1. <?
  2. session_start();
  3. $_SESSION['session']=$_POST['login'];
  4. require("conf/conf.php" );
  5. // si le visteur est passé par la page connexion.php ou s'il s'est identifié en tombant directement sur cette page, on lui renvoit ses infos.
  6. mysql_connect($sql_seveur,$sql_user,$sql_passwd); // Connexion à MySQL
  7. // $row = colonne de l'utilisateur dans la base
  8. $row_conn = mysql_fetch_array($connexion, MYSQL_ASSOC);
  9. // on contrôle que le formulaire de la page connexion.php a bien été rempli, puis on contrôle que le champ "motdepasse" correspond bien à celui de la base.
  10. if (isset($_POST['login']) AND ($_POST['motdepasse']) AND $_POST['motdepasse'] == $row['password'])
  11. {
  12. header("Location:$url_ok" );
  13. }
  14. else
  15. {
  16. header("Location:$url_erreur" );exit;
  17. }
  18. mysql_close(); // Déconnexion de MySQL
  19. ?>


 
Ensuite je met le code suivant en en-tête de default.php pour repérer l'utilisateur:

Code :
  1. <?
  2. session_start();
  3. $var=$_SESSION['session'];


 
le problème est que j'ai mis sur default.php une condition qui dit:

Code :
  1. if (isset($_SESSION['session']))


on affiche quelque chose
 

Code :
  1. else{ blabla}


 
au final, le code me renvoi toujours à la page connexion_erreur.php. si j'enlève les lignes de sessions ça marche, donc c bien là que se trouve l'erreur.
 
Quelqu'un peut-il m'aider svp ?
(je sais j'abuse en demandant souvent de l'aide mais franchement je suis un super doué des codes alors faut m'expliquer longtemps)

Reply

Marsh Posté le 23-11-2005 à 17:34:27   

Reply

Marsh Posté le 23-11-2005 à 18:27:54    

Code :
  1. $row_conn = mysql_fetch_array($connexion, MYSQL_ASSOC);
  2. $row['password']

Cherchez l'erreur. ;)

Reply

Marsh Posté le 23-11-2005 à 22:51:13    

omega2 a écrit :

Code :
  1. $row_conn = mysql_fetch_array($connexion, MYSQL_ASSOC);
  2. $row['password']

Cherchez l'erreur. ;)


 
Bien vu omega2.
 
Je vais contrôler ça demain mais ça sent la bonne remarque.
Sinon l'approche générale te parait bonne où je me gratte l'oreille gauche avec la main droite avec mon approche?
 
Merci vraiment de votre soutien à tous.
 
Allez, à la prochaine question ... :hello: ;)

Reply

Marsh Posté le 24-11-2005 à 08:43:29    

Tu te grattes l'oreille gauche avec la main droite : il suffit de conaitre la page ed conection et l'adresse ok pour passer sans mot de passe ni pseudo (au pire $_SESSION['session'] contiendra une chaine vide mais $_SESSION['session'] existera quand même vu que tu lui affectes une valeur même en cas d'erreur.

Reply

Marsh Posté le 24-11-2005 à 11:38:44    

omega2 a écrit :

Tu te grattes l'oreille gauche avec la main droite : il suffit de conaitre la page ed conection et l'adresse ok pour passer sans mot de passe ni pseudo (au pire $_SESSION['session'] contiendra une chaine vide mais $_SESSION['session'] existera quand même vu que tu lui affectes une valeur même en cas d'erreur.


 
Pourtant quand je contrôle ça marche.
Si tu arrives direct sur ma page detault, ou login ou devis ou autre, sans session tu es renvoyé vers la page connexion erreur.
 
Tiens autre question, j'ai créé plusieurs table mais est-il possible de la relier entre elle avec un champ (par ex. login) ? L'idée serait qu'une fois identifié l'utilisateur puisse accéder uniquement à ses infos même il elles sotn dans des table différentes.

Reply

Marsh Posté le 24-11-2005 à 11:45:46    

Et t'as essayé aprés t'être connecté sans avoir saisie de mot de passe ou de nom d'utilisateur? Certe le navigateur sera renvoyé sur la page d'erreur mais si le navigateur n'y va pas, il aura une session valide lui permettant d'aller sur les différentes pages alors qu'il a saisie n'importe quoi.

Reply

Marsh Posté le 24-11-2005 à 12:16:03    

omega2 a écrit :

Et t'as essayé aprés t'être connecté sans avoir saisie de mot de passe ou de nom d'utilisateur? Certe le navigateur sera renvoyé sur la page d'erreur mais si le navigateur n'y va pas, il aura une session valide lui permettant d'aller sur les différentes pages alors qu'il a saisie n'importe quoi.


 
ben écoutes, je veux bien te croire tu es franchement meilleur que mon en progra mais vraiment je trouve pas de faille (y en a bien sûr comme tjs en info) comme tu la décris.
 

Reply

Marsh Posté le 24-11-2005 à 14:03:09    

Code :
  1. <?
  2. session_start();
  3. $_SESSION['session']=$_POST['login'];

$_SESSION['session'] est donc créé dans tous les cas même si le pseudo ou le mot de passe sont éroné ou vide.
test de validité dans l'autre page :

Code :
  1. if (isset($_SESSION['session']))

toujours vrai vu que créé précédement dans tous les cas même si le pseudo ou le mot de passe n'est pas bon.
Peut être que tu fais d'autres tests pour vérifier la validité dans toutes les pages mais ca se voit pas dans le code que t'as montré.

Reply

Marsh Posté le 24-11-2005 à 14:50:26    

Code :
  1. <?
  2. session_start();
  3. require("conf/conf.php" );
  4. // si le visteur est passé par la page connexion.php ou s'il s'est identifié en tombant directement sur cette page, on lui renvoit ses infos.
  5. mysql_connect($sql_seveur,$sql_user,$sql_passwd); // Connexion à MySQL
  6. // on contrôle que le formulaire de la page connexion.php a bien été rempli, puis on contrôle que le champ "motdepasse" correspond bien à celui de la base.
  7. if (isset($_POST['login']) AND ($_POST['motdepasse']) AND $_POST['motdepasse'] == $row_conn['password'])
  8. {
  9. $_SESSION['login']=$_POST['login'];
  10. header("Location:$url_ok" );
  11. $var_login=$_SESSION['login'];
  12. }
  13. else
  14. {
  15. header("Location:$url_erreur" );exit;
  16. }
  17. mysql_close(); // Déconnexion de MySQL
  18. ?>


 
Comme ça ça à l'air mieux non ? (bon en fait ça marche pas à fond mais c sans doute parce que je suis pas un surdoué en terme de progra. j'adore mais j'ai pas la bonne logique).

Reply

Marsh Posté le 24-11-2005 à 15:01:58    

Oui, là, c'est beaucoup mieux :) à par que t'as perdu ta requette sql au passage, ca doit être pour ça que ton test marche plus.

Reply

Marsh Posté le 24-11-2005 à 15:01:58   

Reply

Marsh Posté le 24-11-2005 à 17:28:33    

Ca marche toujours pas.
En fait, j'ai regarder dans php.ini et le register_global est à off.
J'ai vu un peu partout qu'il est recommendé de le laisser comme ça et d'utiliser des codages différents.
 
$_SESSION fait appel à register_global on ?

Reply

Marsh Posté le 24-11-2005 à 18:29:11    

register_global n'a aucune incidence sur $_SESSION.
register_global quand il est à on ne fait que créer des variables à partir du contenu des tableaux $_SESSION, $_POST, $_GET ...
Par exemple si $_SESSION['session']="test" alors $session sera égale à "test".
Mais si $_SESSION['session'] n'existe pas et qu'il existe un $_POST['session']= "test", on aurait aussi $session égale à "test". C'est à cause de ce danger qu'il est trés fortement conseillé de laisse register_global à off. (en plus, register_global risque de disparaitre totalement dés php6)
 
Si c'est pas un serveur de production, vu que t'as accés au réglage du php.ini, régle l'affichage des alerte/erreur à E_ALL sans rien derriére dans le php.ini. (ligne qui commence par error_reporting ) Ca te donera peut être des indications sur ce qui marche mal/pas .
 
Pour le moment, si t'as remis la requette sql comme il faut, je vois pas ce qui peut bloquer. :(

Reply

Marsh Posté le 24-11-2005 à 21:21:26    

J'ai un peu de mal à comprendre après ma fine lecture verticale de ce joli topic. Le problème, c'est quoi en fait ? Ca rentre tout le temps dans le else ?
 
Auquel cas, un petit peu de debugging tout con à coups de echos... :spamafote:


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 25-11-2005 à 17:32:39    

J'ai résolu le truc à la bourrin de la manière suivante:
[code]<?
session_start();
 
require("conf/conf.php" );
$login = $_POST['login'];
$passwd = $_POST['motdepasse'];
$_SESSION['login'] = $login;
$session = $_SESSION['login'];
 
// connexion à mysql
$db_link = mysql_connect($sql_serveur,$sql_user,$sql_passwd);
// Sélection des tables
$connexion = mysql_db_query($sql_bdd,"SELECT * FROM connexion WHERE login='$session'" )or die( 'Erreur MySQL : ' . mysql_error() );;
 
// Sélection des tables
$row_conn = mysql_fetch_array($connexion, MYSQL_ASSOC);
 
// on contrôle que le formulaire de la page connexion.php a bien été rempli, puis on contrôle que le champ "motdepasse" correspond bien à celui de la base.
if ($login == $row_conn['login'] AND $passwd == $row_conn['password'])
{[code]
 
Je sais c pas le top en terme de sécurité mais bon j'ai pas un site avec du passge, c'est surtout pour avoir un espace privilégié et interactif avec mes clients.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed