[php] Probleme de conception - sessions/cookie&co

Probleme de conception - sessions/cookie&co [php] - PHP - Programmation

Marsh Posté le 12-02-2005 à 13:42:21    

Salut,
 
j'essaie de me familiariser un peu avec php et je bloque depuis qq temps sur un probleme de conception.
j'ai fait un faux site pour m'entrainer et j'aimerais un systeme d'authentification.
J4ai fouillé un peu le net et j'arrive a peu pres a faire ce qu'il me faut mais pas comme je l'aimerais.
 
j'explique :D :
 
j'aimerais avoir le schema suivant =>
index.php?action=login
index.php?action=logout
index.php qui affiche soit le site, soit le formulaire d'auth.
d'autres pages bidons.
avec sessions+cookie
 
je n'arrive pas a voir comment organiser le code de index.php :/
 
je pensais un autre truc dans le genre :
 

Code :
  1. <? session_start();
  2. if (!isset($_SESSION['login']))
  3. {
  4. if ($_GET['action'] == 'login')
  5. {
  6.  //if mdp pas bon => index.php
  7.                 //if mdp ok => index.php
  8.  exit;
  9. }
  10. echo 'formulaire';
  11.         <form action="topmoumout.php?action=login" method='post'>
  12.         ...
  13.         exit;
  14. }
  15. //le site
  16. if ($_GET['action'] == 'logout')
  17. {
  18. session_unset();
  19. session_destroy();
  20. }


qu'en pensez vous ?
 
Tout cela est confu dans ma tete. et je n'ai pas trouvé ce que je cherche sur le net.
 
toute aide est la bienvenue.
 
Merci


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
Reply

Marsh Posté le 12-02-2005 à 13:42:21   

Reply

Marsh Posté le 12-02-2005 à 18:45:08    

Salut,
 
Ton script a l'air de marcher plus ou moins, meme si je trouve qu'on peut faire plus propre :D . Essaie avec lui, si par la suite te sera coincé tu le modifiera en consequence, sinon c'est cool  :bounce:


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 12-02-2005 à 21:23:03    

merci, mais justement, j'aimerais savoir comment faire propre. :D


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
Reply

Marsh Posté le 12-02-2005 à 21:26:48    

Faut reflechir un peu, essayer d'imbriquer le moins possible de if (c'est comme ca qu'apres quand ca deviens complex on loupe une condition possible) et de ne pas repeter 2 fois ce qui peut etre ecrit une seule fois...
 
Moi je verrais une structure en  
if elseif elseif ... else.
 
Du genre if(session existante)
elseif(session pa existante mais demande d'acces a la page de login)
elseif(session pa existante mais demande d'otentification par un POST)
elseif(session pa existante mais demande de logout)
...


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 12-02-2005 à 21:34:20    

ok merci. je vais revoir ca.


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
Reply

Marsh Posté le 12-02-2005 à 21:37:10    

Disons que c'est comme ca que je vois les choses ... je trouve plus facile de se retrouver quand t'a des if sur un seul niveau plutot que sur 9 le tout entremelé d'autres fonctions :p


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 12-02-2005 à 23:57:00    

j'ai réussi à faire qqc qui me plait assez. [:gm_superstar]  
 

Code :
  1. <?
  2. session_start();
  3. require 'config.inc.php';
  4. require_once "PEAR.php";
  5. require_once 'DB.php';
  6. $baseurl = "http://" . $_SERVER['HTTP_HOST']. dirname($_SERVER['PHP_SELF']). "/";
  7. if ($_GET['action'] == 'login')  //verif de l'auth.
  8. {
  9. $db =& DB::connect($dsn);
  10. if (DB::isError($db))
  11.  die($db->getMessage());
  12. if(isset($_POST) and !empty($_POST['login']) and !empty($_POST['password']))
  13. {
  14.    extract($_POST);
  15.    $sql = "select password from users where login='".$login."'";
  16.    $res =& $db->query($sql);
  17.    $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
  18.    $db->disconnect();
  19.    if($row[password] == md5($password))
  20.    {
  21.      $_SESSION['login'] = $login; //TODO: ecrire ds cookie
  22.   header("Location: ".$baseurl."page.php" );
  23.    }
  24. }
  25. }
  26. elseif ($_GET['action'] == 'logout') //logout
  27. {
  28. session_unset();
  29. session_destroy();
  30. }
  31. elseif (isset($_SESSION['login']))   //si session existe. TODO: verif cookie.
  32. header("Location: ".$baseurl."page.php" );
  33. ?>
  34. <form action="topmoumout.php?action=login" method='post'>
  35. <table align="center" border="0">
  36. <tr>
  37.  <td>Login :</td><td><input type="text" name="login" maxlength="250"></td>
  38. </tr>
  39. <tr>
  40.  <td>Password</td><td><input type="password"name="password" maxlength="20"></td>
  41. </tr>
  42. <tr>
  43.  <td colspan="2" align="center"><input type="submit" value="log in"></td>
  44. </tr>
  45. </table>
  46. </form>


 
vous en pensez quoi ?


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
Reply

Marsh Posté le 13-02-2005 à 08:09:33    

Personnellement j'aurais regroupé les 2 if imbriqués ... celui pour l'action et celui pour voir si le mdp / login sont envoyés... Et j'aurais monter le systeme a l'envers... en commancant avec le cas ou la session marche, comme ca pas besoin de faire une redirection


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 13-02-2005 à 11:00:06    

autre petite question.
si j'utilise session_set_cookie_params() pour augmenter la durée de vie du cookie de sessions est ce propre ou serait il mieux de faire un vrai systeme avec cookie en plus des sessions ?


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
Reply

Marsh Posté le 13-02-2005 à 11:05:37    

Personnellement j'ai toujours utilisé les session, en forçant a ce qu'elles utilisent un session id recupéré par cookie et non par get ... Je trouve plus propre que les info soient gardées coté serveur plutot que coté client


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 13-02-2005 à 11:05:37   

Reply

Marsh Posté le 13-02-2005 à 11:11:41    

donc tu crées un cookie pour mettre un SID, puis tu le lis s'il existe ?
 
pourquoi ne pas utiliser le cookie generé par les sessions php ?
 
ou alors j'ai rien compris :p


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
Reply

Marsh Posté le 13-02-2005 à 11:55:11    

Non justement j'utilise le cookie créé par les sessions, seulement si le client n'accepte pas le cookie, Apache va lui envoyer le session id (SID c'est une version de Debian (linux) :p) par GET .. ce qui peut etre considerer comme un trou de secu ... Donc faut dire que soit ca passe par cookie, soit ca passe pas


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 13-02-2005 à 11:58:28    

comment tu fais pour forcer le cookie ? je viens de faire des tests en utilisant le cookie de sessions et en changeantson expire_limit mais j'ai un probleme. ca marche super bien sous ie mais pas sous FireFox.
 
:'(


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
Reply

Sujets relatifs:

Leave a Replay

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