Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1526 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Methode d'authentification?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] Methode d'authentification?

n°227793
trictrac
Posté le 14-10-2002 à 18:29:23  profilanswer
 

en fait j'aurais voulu savoir comment vous identifiez vos users sur votre site tout au long de leur surf??? par mot de passe dasn une base de donnée bien sur (enfin je pense), mais comment vous faite pour savoir a chaque instant DANS le site de quel user il s'agit??
Cookie, ID dasn URL, session PHP, cumul de tout ca??
 
Et si vous auriez des exemples (tout fait? ;) ) concernant la gestion des sessions ca m'interesserait, parce que je voulais le faire avec ca, mais il y a deux trois truc que je comprend pas trop dans mon bouk1 :(
Merci

mood
Publicité
Posté le 14-10-2002 à 18:29:23  profilanswer
 

n°227850
trictrac
Posté le 14-10-2002 à 19:26:35  profilanswer
 

euh...

n°227853
ethernal
Chercheur de vérité...
Posté le 14-10-2002 à 19:37:35  profilanswer
 

Le but est pour une simple autentification :
- créer un numéro unique
- le stocker chez l'utilisateur  
- valider le login/pwd
- l'enregistrer sur le serveur dans une table (num_unique, nom, droits, temps limite...)
 
- lire le numéro unique de l'utilisateur
- chercher la correspondance dans la table
- valider l'utilisateur connecté (temps limite).
- on sait qui est sur le site.
 
Comment gérer ce numéro unique ?
1. les sessions php : le plus simple, mais aussi le plus contraigant.  On n'utilise dans ce cas que la capacité à générer un numéro unique... (elles sont plus utiles dans le cas de la gestion d'un caddie)
Les sessions fonctionnent en général avec un cookie (id unique généré et envoyé dans un cookie).
Si l'utilisateur refuse les cookies, en fonction de la configuration du serveur php, le code sera parsé avant l'envoi : Il ajoutera le numéro de session à la suite du tag html <a href="">.  
Cela peut poser de graves problèmes si tu génères tes urls avec du javascript à moins que tu ne saches désactiver l'ajout du numéro de session par le serveur.
voir un tutorial : http://www.toutestfacile.com/phpin [...] =sessions0
 
2. Les cookies : pas très sûr si tu y stockes directement le login+pwd.  Donc il vaut mieux stocker un numéro unique (par exemple avec md5(uniqid(rand(),1)); )...
si l'utilisateur les refuse que faire ?  
Faire passer le cookie dans l'url ou lui dire d'activer les cookies. ;)
c'est une bonne solution, facile et rapide à mettre en place.
Uniquement vallable pour une authentification. Pour un caddie, il faut impérativement utiliser les sessions.
 
3. Créer son propre module de session.
c'est sans doute la meilleure solution, la moins dépendante du serveur et la plus couteuse en temps de codage et d'exécution.
Il existe des classes toute faites ( voir http://www.phpclasses.org ).
S'il faut 0.00024 sec pour exécuter un script avec une session php, compte 0.0025 sec pour exécuter un script avec une session perso (dans le meilleur des cas).


Message édité par ethernal le 14-10-2002 à 19:39:38

---------------
...oups kernel error...
n°227882
trictrac
Posté le 14-10-2002 à 20:25:57  profilanswer
 

pinaise, ca c'est de la reponse, merci!!!
Manque plus qu'un exemple mis en place par qqun, si possible bien sur ;)

n°227913
ethernal
Chercheur de vérité...
Posté le 14-10-2002 à 22:01:16  profilanswer
 

:lol:
c pas bien compliqué...
 
(je l'ai pas testé, ça vient de (http://www.phpcomplete.com/content.php?page=4&id=72) je l'ai juste un peu modifié.  ça correspond +- à ce que j'utilise.
 
validation.php

Code :
  1. session_start();
  2. $db_user = 'mysql_username';
  3. $db_pass = 'mysql_password';
  4. $user_name = $_POST['user_name'];
  5. $password = $_POST['password'];
  6. //connect to the DB and select the "dictator" database
  7. $connection = mysql_connect('localhost', $db_user, $db_pass) or die(mysql_error());
  8. mysql_select_db('monsite', $connection) or die(mysql_error());
  9. //set up the query
  10. $query = "SELECT * FROM users WHERE user_name='$user_name' AND password='$password'";
  11. //run the query and get the number of affected rows
  12. $result = mysql_query($query, $connection) or die('error making query');
  13. $affected_rows = mysql_num_rows($result);
  14. //if there's exactly one result, the user is validated. Otherwise, he's invalid
  15. if($affected_rows == 1) {
  16. $query = "INSERT INTO registered_users (id, user_name, timeout) VALUES (".session_id().", $user_name, time()+60*3)";
  17. header("location: index.php" );
  18. }
  19. else {
  20. print 'not valid';
  21. }


 
code à inclure en haut de chaque page

Code :
  1. session_start();
  2. $query = "SELECT * FROM registered_users
  3.   WHERE id=".session_id();
  4. //run the query
  5. $result = mysql_query($query, $connection) or die('error making query');
  6. //tester le temps limite et supprimer les enregs dont le temps est dépassé.
  7. $row= mysql_fetch_array($result);
  8. if ($row['timeout']>time()){
  9.   $currentuser= $row['login']; //nomm de l'utilisateur
  10. }
  11. $query = "DELETE FROM registered_users WHERE timeout<".time();
  12. mysql_query($query, $connection) or die('error making query');



---------------
...oups kernel error...
n°227917
trictrac
Posté le 14-10-2002 à 22:09:08  profilanswer
 

merci bocou, je vais etudier tout ca :jap:

n°227920
JWhy
je peux plier (héhé)
Posté le 14-10-2002 à 22:19:40  profilanswer
 
n°227927
ethernal
Chercheur de vérité...
Posté le 14-10-2002 à 22:47:11  profilanswer
 

y a juste un problème dans ton cas :
si qq arrive à avoir le cookie contenant le login et la md5(cle1.login.cle2), il saura toujours avoir accès au compte de cet user, comme s'il avait le mot de passe.
-ça peut arriver s'il se logue à partir d'un pc public
-si tu as prévu de le passer par l'url dans le cas ou l'utilisateur refuserait les cookies.
et l'utilisateur en voyant une utilisation externe de son compte ne saurait l'empêcher qu'en changeant de login (ou toi tes clés).
 
mais bon ça a son avantage comme tu le dis, pas besoin de se reloguer chaque fois et ce, sans avoir de pwd dans le cookie :)


---------------
...oups kernel error...
n°227939
trictrac
Posté le 14-10-2002 à 23:27:44  profilanswer
 

moi je voulais aussi faire passer un num de session en url au debut, mais j'avais peur de l'historiques des liens.... vu que le site sera svt acceder depuis des postes publiques...
le probleme que j'ai c'est pour definir la duree d'une session :( (pas en prog)
Mais bon, pour l'instnant je vais faire ca comme un boeuf, sans secu, et je reviendrais demander quand je m'attaquerais a la finition ;)

n°227940
ethernal
Chercheur de vérité...
Posté le 14-10-2002 à 23:49:44  profilanswer
 

l'avantage des sessions est d'avoir une durée de vie limitée, de sorte que si qq récupère l'url, il ne saura l'utiliser que pdt un certain temps, ou pas du tout.
 
pour modifier la durée du cookie de session :
session_set_cookie_params($duréee);
attention, la durée de ce cookie n'est pas le temps actuel+un délais (time()+60*60), mais bien le délais seul (ex : 60*60 pour 1 heure).
 
Le timeout dans la table registered_user sert à savoir qui est online.  Le taux d'erreur dépend de la durée du timeout.
si le timeout est de 2 minutes, certaines personnes ne sont peut-être plus sur le site depuis 1min 59sec...


Message édité par ethernal le 14-10-2002 à 23:51:23

---------------
...oups kernel error...
mood
Publicité
Posté le 14-10-2002 à 23:49:44  profilanswer
 

n°228613
omega2
Posté le 16-10-2002 à 11:43:52  profilanswer
 

Moi ce que j'ai fait, c'est que tout au long du site :
Tout ce qui est administration, il faut que les cookies soient activé (numéro de session inscrit dans le cookie). Bref, pour qu'une personne puisse modifier son compte ou pour administrer une partie du site (ou tout le site), il faut être concecté.
 
Tant qu'une personne n'est pas conecté, elle doit saisir son nom+mot de passe à chaque fois qu'elle poste quelque chôse (forum, news ...)
Dès qu'une personne est conecté, (avec cookie activé obligatoirement) si elle a pas le droit de poster à un endroit donné, je ne lui envoie pas le formulaire et si elle a le droit, je l'identifies grâce à son numéro de session (incrémentation d'un numéro grace à la bdd + une chaine de caractère aléatoire) et son IP.
 
Pour les zones réservé à certaines personne, je ne leur affiche le lien que si elle se sont identifié.
 
Il n'y a que pour le chat que j'ai mis en place un système de numéro de session dans les liens et ca ne corespond pas au même système de session que pour le reste du site (session avec une durée de validité plus courte mais remise à jour à chaque chargement de la page)
 
 
BRef, j'ai fait mon système perso.

n°306524
kileak2
Posté le 11-02-2003 à 17:12:55  profilanswer
 

ethernal a écrit :

l'avantage des sessions est d'avoir une durée de vie limitée, de sorte que si qq récupère l'url, il ne saura l'utiliser que pdt un certain temps, ou pas du tout.
 
pour modifier la durée du cookie de session :
session_set_cookie_params($duréee);
attention, la durée de ce cookie n'est pas le temps actuel+un délais (time()+60*60), mais bien le délais seul (ex : 60*60 pour 1 heure).
 
Le timeout dans la table registered_user sert à savoir qui est online.  Le taux d'erreur dépend de la durée du timeout.
si le timeout est de 2 minutes, certaines personnes ne sont peut-être plus sur le site depuis 1min 59sec...


 
Salut !
 
Ethernal, vu que tu as l'air de toucher en PHP, je poste ici (sachant que ki veut m'aider PEUT  :p )
 
J'ai chopé http://www.phpscripts-fr.net/?page=script&id=308
 
C un script d'authentification qui m'a l'air carrément pas mal mais je ne comprends pas sa page login.php (enfinà partir d'un certain moment !)
 
La voici :
 

Citation :

<?
require("protec/passe/conf.php3" );
 
$db_link = mysql_connect($sql_serveur,$sql_user,$sql_passwd);
$requete=mysql_db_query($sql_bdd,"select * from membre where pseudo=\"$pseudo\" and passe=\"$passe\"",$db_link);
if(mysql_num_rows($requete)==0)
 {
 header("Location:$url_erreur" );exit;
 }
else
$destination=mysql_result($requete,$i,"destination" );
 {
        $taille = 20;
 $lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
 srand(time());
 for ($i=0;$i<$taille;$i++)
  {
  $id.=substr($lettres,(rand()%(strlen($lettres))),1);
  }
   
 $requete=mysql_db_query($sql_bdd,"update membre set id=\"$id\" where pseudo=\"$pseudo\" and passe=\"$passe\"",$db_link);
 
 header("Location:$destination?id=$id" );
 }
 
mysql_close($db_link);
?>


 
Que font les accolades là ? (celles en gras)
Ya le ELSE et un eligne de code ==> ;
 
pui {.......} ???
 
En plus, je ne comprends pas ce que fait :
 

Citation :

$destination=mysql_result($requete,$i,"destination" );


 
need help ;)
 
merci

n°306553
kileak2
Posté le 11-02-2003 à 17:42:42  profilanswer
 

alors j'ai regradé ds le fucking manual et ca veut dire koi en FRANCAIS :
 

Citation :

mysql_result (PHP 3, PHP 4 >= 4.0b1)
Retourne un champs d?un résultat.
 
mixed mysql_result (resource result_identifier, int row, mixed [field])
 
mysql_result() retourne le contenu d?un champs dans le résultat MySQL result_identifier. L?argument row
peut-être un offset de champs, ou le nom d?un champs, ou le nom de la table + point + le nom du champs ("table.champs" ).
Si la colonne a été aliasée, utilisez de préférence l?alias.


 
result identifier est la variable qui contient le résultat d'une requete ca j'ai :)
 
row je vois et mixed field encore moins !
 
merci

n°306676
ethernal
Chercheur de vérité...
Posté le 11-02-2003 à 19:01:34  profilanswer
 

pour l'accolade, à mon avis il y a une erreur.ça doit être  

Code :
  1. ...
  2. else {
  3.   $destination=mysql_result($requete,$i,"destination" );
  4.   $taille = 20;
  5. ...


 
pour le mysql_result(), il récupère la valeur du champ "destination" de la ligne $i qui n'est pas défini auparavant.  Ce champ destination est je suppose le nom d'une page php.  j'en vois pas l'intérêt.
Il ne te manquerais pas un bout de code ? (j'ai pas downloadé le script pour voir plus en profondeur)
 
ps: je n'ai pas vérifié, mais je pense que le mixed[field] peut prendre comme valeur le nom du champ ou son numéro (position 1, ...)


Message édité par ethernal le 11-02-2003 à 19:03:24
n°307097
kileak2
Posté le 11-02-2003 à 23:16:31  profilanswer
 

ethernal a écrit :

pour l'accolade, à mon avis il y a une erreur.ça doit être  

Code :
  1. ...
  2. else {
  3.   $destination=mysql_result($requete,$i,"destination" );
  4.   $taille = 20;
  5. ...


 
pour le mysql_result(), il récupère la valeur du champ "destination" de la ligne $i qui n'est pas défini auparavant.  Ce champ destination est je suppose le nom d'une page php.  j'en vois pas l'intérêt.
Il ne te manquerais pas un bout de code ? (j'ai pas downloadé le script pour voir plus en profondeur)
 
ps: je n'ai pas vérifié, mais je pense que le mixed[field] peut prendre comme valeur le nom du champ ou son numéro (position 1, ...)


 
merci
 
non il ne me manque pas un ou de code. En fait destination est bien une page. Ca sert à rediriger un user vers une page et un autre vers une autre page, peut importe.
 
la variable $i n'est pas défini. Est-ce que ds ce cas sa valeur par défaut est 0 ?
 
Sinon son usage est-il par exemple : Ona une table de 1000 lignes on met $i = 500, on commence la recherche au 500ème enregistrement (offset en fait :) ) ? me goure-je ?
 
merci encore

n°307508
Oreste
Posté le 12-02-2003 à 14:48:19  profilanswer
 

Ethernal ta solution est tip top, mais si je me trompe pas a chaque demande de l utilisateur tu es obligé de requeter sur ta base de donnée non (pour voir si la ligne existe bien dans ta table d authentification) ? Ca fait pas un peu lourd si y a trop de visiteurs ?
 
Autre question comment tu fais pour savoir qu un utilisateur s est deconnecté et ainsi supprimer la ligne dans cette table temporaire ?

n°307535
kileak2
Posté le 12-02-2003 à 15:09:34  profilanswer
 

Oreste a écrit :

...
Autre question comment tu fais pour savoir qu un utilisateur s est deconnecté et ainsi supprimer la ligne dans cette table temporaire ?


 
C'est vrai ca. Ce que je comprends pas c qu'il faut se trimballer une verif d'ID session sur tout le site si on veut gérer une authent... Mettre puis checker un Cookie ne suffit pas ? C qd même plus léger non ?

n°307922
Evolvox
Toujours y croire, toujours...
Posté le 12-02-2003 à 21:39:25  profilanswer
 

Personnellement, j'utilise un cookie, mais il est non permanent... c'est mieux ? Je pense que oui, je vois pas trop comment le choper sinon (à part via un Cross Site Scripting).


Message édité par Evolvox le 12-02-2003 à 21:40:00
n°307926
Evolvox
Toujours y croire, toujours...
Posté le 12-02-2003 à 21:46:22  profilanswer
 

ethernal a écrit :


2. Les cookies : pas très sûr si tu y stockes directement le login+pwd.  Donc il vaut mieux stocker un numéro unique (par exemple avec md5(uniqid(rand(),1)); )...
si l'utilisateur les refuse que faire ?  
Faire passer le cookie dans l'url ou lui dire d'activer les cookies. ;)
c'est une bonne solution, facile et rapide à mettre en place.
Uniquement vallable pour une authentification. Pour un caddie, il faut impérativement utiliser les sessions.


 
Je comprends pas trop comment tu t'y prends  :??:

n°311899
scratched
Posté le 18-02-2003 à 12:00:51  profilanswer
 

ma solution:
 
a l'arrivé sur le site:
-je verifie si le cookie qui stocke le numero de session existe
-si oui, j'utilise la session deja active
-sinon je demarre une nouvelle session, je crée le cookie (valable 24h)
-j'efface les anciennes sessions (vieilles de 24h par exxemple)
 
ensuite le numero de session est passé a chaque page via l'url
 
comme ca, je stocke le login, mot de passe et autres infos dans une table correspondante au numero de session


Message édité par scratched le 18-02-2003 à 12:07:07
n°311963
ethernal
Chercheur de vérité...
Posté le 18-02-2003 à 13:25:21  profilanswer
 

Evolvox a écrit :


 
Je comprends pas trop comment tu t'y prends  :??:  


 
avec un cookie qui contient le login et pwd, tu vas à chaque page (comme ici) regarder dans la table des users si il existe.  Si oui tu lui donnes certaines autorisations.  
En cas de machines publiques ou de pc multi-user, si qq regarde le cookie, il a le login et le pwd (même si celui est crypté, il le recopie et l'installe sur une autre machine et ça fct)
La personne sera obligée de modifier son password.
 
Pour éviter cela (et d'autres propositions genre md5($login.$pwd.'ma clé unique';)), je propose que après l'authentification de la personne (envoi de son login/pwd), de créer dans table user à la ligne correspondant à l'utilisateur un numéro généré automatiquement et unique.
Lors de l'accès à une page le numéro dans le cookie est envoyé et la correspondance est checkée dans la table users.
Si l'utilisateur voit que qq a intercepté son cookie, il lui suffit de se déconnecter et de se reconnecter, le numéro aura changé et la personne qui a l'ancien numéro de cookie sera refusée.
Je dirais que c'est une pseudo session...  ici le numéro unique n'est pas limité dans le temps, contrairement aux sessions php.

n°312031
kileak2
Posté le 18-02-2003 à 14:54:31  profilanswer
 

ethernal a écrit :


 
avec un cookie qui contient le login et pwd, tu vas à chaque page (comme ici) regarder dans la table des users si il existe.  Si oui tu lui donnes certaines autorisations.  
En cas de machines publiques ou de pc multi-user, si qq regarde le cookie, il a le login et le pwd (même si celui est crypté, il le recopie et l'installe sur une autre machine et ça fct)
La personne sera obligée de modifier son password.
 
Pour éviter cela (et d'autres propositions genre md5($login.$pwd.'ma clé unique';)), je propose que après l'authentification de la personne (envoi de son login/pwd), de créer dans table user à la ligne correspondant à l'utilisateur un numéro généré automatiquement et unique.
Lors de l'accès à une page le numéro dans le cookie est envoyé et la correspondance est checkée dans la table users.
Si l'utilisateur voit que qq a intercepté son cookie, il lui suffit de se déconnecter et de se reconnecter, le numéro aura changé et la personne qui a l'ancien numéro de cookie sera refusée.
Je dirais que c'est une pseudo session...  ici le numéro unique n'est pas limité dans le temps, contrairement aux sessions php.


 
sioux  ;)

n°345531
parappa
taliblanc
Posté le 27-03-2003 à 16:18:39  profilanswer
 

ethernal a écrit :

:lol:
c pas bien compliqué...
 
(je l'ai pas testé, ça vient de (http://www.phpcomplete.com/content.php?page=4&id=72) je l'ai juste un peu modifié.  ça correspond +- à ce que j'utilise.
 
validation.php

Code :
  1. session_start();
  2. $db_user = 'mysql_username';
  3. $db_pass = 'mysql_password';
  4. $user_name = $_POST['user_name'];
  5. $password = $_POST['password'];
  6. //connect to the DB and select the "dictator" database
  7. $connection = mysql_connect('localhost', $db_user, $db_pass) or die(mysql_error());
  8. mysql_select_db('monsite', $connection) or die(mysql_error());
  9. //set up the query
  10. $query = "SELECT * FROM users WHERE user_name='$user_name' AND password='$password'";
  11. //run the query and get the number of affected rows
  12. $result = mysql_query($query, $connection) or die('error making query');
  13. $affected_rows = mysql_num_rows($result);
  14. //if there's exactly one result, the user is validated. Otherwise, he's invalid
  15. if($affected_rows == 1) {
  16. $query = "INSERT INTO registered_users (id, user_name, timeout) VALUES (".session_id().", $user_name, time()+60*3)";
  17. header("location: index.php" );
  18. }
  19. else {
  20. print 'not valid';
  21. }


 
code à inclure en haut de chaque page

Code :
  1. session_start();
  2. $query = "SELECT * FROM registered_users
  3.   WHERE id=".session_id();
  4. //run the query
  5. $result = mysql_query($query, $connection) or die('error making query');
  6. //tester le temps limite et supprimer les enregs dont le temps est dépassé.
  7. $row= mysql_fetch_array($result);
  8. if ($row['timeout']>time()){
  9.   $currentuser= $row['login']; //nomm de l'utilisateur
  10. }
  11. $query = "DELETE FROM registered_users WHERE timeout<".time();
  12. mysql_query($query, $connection) or die('error making query');


 


 
Ethernal > j'ai petit soucis avec le deuxième script. Lorsque j'exécute le tout, j'obtiens le message d'erreur suivant :  
 

Code :
  1. Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in c:\program files\easyphp\www\auth2\index2.php on line 8
  2. error making query


 
(la ligne 8 correspondant à $result = mysql_query($query, $connection) or die('error making query';); ). Tu vois à quoi c'est du ?


Message édité par parappa le 27-03-2003 à 16:20:52

---------------
DU LINO DE BATARD IMITATION CARREAUX DE CIMENTS ILLEGITIMES§§§
n°345548
ethernal
Chercheur de vérité...
Posté le 27-03-2003 à 16:24:11  profilanswer
 

s'pas bien de copier sans comprendre  :non:  
 
dans le second script, tu as oublié (enfin, je n'ai pas cru bon de devoir me répéter) de te connetcer à la bd...
 
Pour les suivants : il faut ajouter en début de fichier  

Code :
  1. $connection = mysql_connect('localhost', $db_user, $db_pass) or die(mysql_error());



Message édité par ethernal le 27-03-2003 à 16:33:33

---------------
...oups kernel error...
n°345557
parappa
taliblanc
Posté le 27-03-2003 à 16:27:14  profilanswer
 

(Je sais. :/)
 
Ça se tient. :D


Message édité par parappa le 27-03-2003 à 16:27:26

---------------
DU LINO DE BATARD IMITATION CARREAUX DE CIMENTS ILLEGITIMES§§§
n°345614
parappa
taliblanc
Posté le 27-03-2003 à 16:43:34  profilanswer
 

(Spa facile de trouver un tuto complet sur les authentifications en français. :/)
 
Bon si tu es là ça sera plus simple de comprendre justement (je débute, mais ça ne t'étonnera pas :D).
 

Code :
  1. <?
  2. session_start();
  3. //connect to the DB and select the database
  4. $connection = mysql_connect('localhost', 'root', '') or die(mysql_error());
  5. mysql_select_db('perso',$connection);
  6. $query = "SELECT * FROM registered_users
  7.   WHERE id=".session_id();
  8. //run the query
  9. $result = mysql_query($query, $connection) or die('error 1 making query');
  10. //tester le temps limite et supprimer les enregs dont le temps est dépassé.
  11. $row= mysql_fetch_array($result);
  12. if ($row['timeout']>time()){
  13. $currentuser= $row['login']; //nom de l'utilisateur
  14. }
  15. $query = "DELETE FROM registered_users WHERE timeout<".time();
  16. mysql_query($query, $connection) or die('error 2 making query');
  17. ?>


 
Bon actuellement, j'ai error 1 making query comme réponse. C'est à dire que la première requête ne fonctionne pas.  
 
J'ai bien une table registered_users dans ma base perso, qui ressemble à ça :  
 
id int (11) notnull auto_increment  
user_name varchar(50) notnull
timeout int(11) notnull
 
Il y a un problème avec ça ?
 
Autre chose : les tables registered_users et users sont liées ?
 
Merci. :)


Message édité par parappa le 27-03-2003 à 16:44:35

---------------
DU LINO DE BATARD IMITATION CARREAUX DE CIMENTS ILLEGITIMES§§§
n°345701
ethernal
Chercheur de vérité...
Posté le 27-03-2003 à 17:18:55  profilanswer
 

pour être sûr :

Code :
  1. $query = "SELECT * FROM registered_users WHERE id=".session_id();


 
ensuite :
id est un varchar de 32 caractères (session_id()) et n'est pas en auto_increment, mais en primary key.
 
Description de la table :

Code :
  1. CREATE TABLE RegisteredUsers (
  2.   id varchar(32) NOT NULL default '',
  3.   user_id int(6) unsigned NOT NULL default '0', (pas obligatoire)
  4.   login varchar(30) NOT NULL default '',
  5.   limittime int(10) unsigned NOT NULL default '0',
  6.   IP varchar(15) NOT NULL default '0',
  7.   PRIMARY KEY  (id)
  8. ) TYPE=MyISAM;


 
Elles sont liées par le fait que la table registered_users n'est qu'une copie d'une partie de la table users, mais ça s'arrète là.
 
ex de table user :

Code :
  1. CREATE TABLE Users (
  2.   id int(6) unsigned NOT NULL auto_increment,
  3.   login varchar(15) NOT NULL default '',
  4.   password varchar(40) NOT NULL default '',
  5.   email varchar(30) NOT NULL default '',
  6.   key varchar(32) NOT NULL default '',
  7.   lastname varchar(30) default NULL,
  8.   firstname varchar(30) default NULL,
  9.   icq varchar(15) default NULL,
  10.   homesite varchar(255) default NULL,
  11.   signature text,
  12.   nbposts int(10) unsigned default '0',
  13.   nbtopics int(10) unsigned NOT NULL default '0',
  14.   lastconnexion int(10) unsigned NOT NULL default '0',
  15.   lastip int(9) NOT NULL default '0',
  16.   PRIMARY KEY  (id),
  17.   UNIQUE KEY login (login),
  18.   UNIQUE KEY email (email)
  19. ) TYPE=MyISAM;


Message édité par ethernal le 27-03-2003 à 17:25:23

---------------
...oups kernel error...
n°345742
parappa
taliblanc
Posté le 27-03-2003 à 17:36:02  profilanswer
 

(Je te remercie d'aider un graphiste en pleine déroute. :D)
 
Bon j'ai rectifié mes tables, mais j'obtiens toujours la même erreur sur la deuxième page : error 1 making query.
 
Je copie les codes des 2 pages, pour être certain :
 
validation.php

Code :
  1. <?
  2. session_start();
  3. $db_user = 'root';
  4. $db_pass = '';
  5. $user_name = 'taiste';
  6. $password = 'taiste';
  7. //connect to the DB and select the "dictator" database
  8. $connection = mysql_connect('localhost', $db_user, $db_pass) or die(mysql_error());
  9. mysql_select_db('perso', $connection) or die(mysql_error());
  10. //set up the query
  11. $query = "SELECT * FROM users WHERE login='$user_name' AND password='$password'";
  12. //run the query and get the number of affected rows
  13. $result = mysql_query($query, $connection) or die('error making query');
  14. $affected_rows = mysql_num_rows($result);
  15. //if there's exactly one result, the user is validated. Otherwise, he's invalid
  16. if($affected_rows == 1) {
  17. $query = "INSERT INTO registered_users (id, user_name, timeout) VALUES (".session_id().", $user_name, time()+60*3)";
  18. header("location: index2.php" );
  19. }
  20. else {
  21. print 'not valid';
  22. }
  23. ?>


 
index2.php

Code :
  1. <?
  2. session_start();
  3. $connection = mysql_connect('localhost', 'root', '') or die(mysql_error());
  4. mysql_select_db('perso',$connection);
  5. $query = "SELECT * FROM registered_users WHERE id=".session_id();
  6. //run the query
  7. $result = mysql_query($query, $connection) or die('error1 making query');
  8. //tester le temps limite et supprimer les enregs dont le temps est dépassé.
  9. $row= mysql_fetch_array($result);
  10. if ($row['timeout']>time()){
  11. $currentuser= $row['login']; //nom de l'utilisateur
  12. }
  13. $query = "DELETE FROM registered_users WHERE timeout<".time();
  14. mysql_query($query, $connection) or die('error2 making query');
  15. ?>


 
Tu vois une erreur monstrueuse ? :D


---------------
DU LINO DE BATARD IMITATION CARREAUX DE CIMENTS ILLEGITIMES§§§
n°345782
ethernal
Chercheur de vérité...
Posté le 27-03-2003 à 17:57:30  profilanswer
 

justement non :(
 
met un "or die ('db non trouvée';);" après le mysql_select_db('perso',$connection);  
 
-> mysql_select_db('perso',$connection) or die ('db non trouvée';);  
 
 
et enlève le "or die" après le "mysql_query($query, $connexion);"
 


---------------
...oups kernel error...
n°345805
parappa
taliblanc
Posté le 27-03-2003 à 18:16:54  profilanswer
 

Aucun changement. Ça m'ennuie. :D
 
Tu me confirmes qu'il n'y a besoin de rien d'autre que ces 2 pages de code pour que ça fonctionne ? On sait jamais, j'ai peut-être oublié quelque chose.  
 
J'utilise easyphp, qui semble configuré correctement ('y a d'autres scripts qui fonctionnent).  


---------------
DU LINO DE BATARD IMITATION CARREAUX DE CIMENTS ILLEGITIMES§§§
n°345887
ethernal
Chercheur de vérité...
Posté le 27-03-2003 à 19:58:43  profilanswer
 

parappa a écrit :

Aucun changement. Ça m'ennuie. :D


sûr ?  :heink:  
normalement il doit t'afficher le message d'erreur au lieu de error 1 making query et ce message est certainement plus explicite.
 

parappa a écrit :


Tu me confirmes qu'il n'y a besoin de rien d'autre que ces 2 pages de code pour que ça fonctionne ? On sait jamais, j'ai peut-être oublié quelque chose.  


je n'ai jamais dit que c'était un kit tout fait...
ces 2 pages devraient fonctionner (comme dit au début, elles proviennent d'un tutorial et correspondent +- à ce que j'utilise)
la page n°1 est la connexion.
la page n°2 doit être incluse dans chaque page du site pour suivre la personne. Mais, il faut ajouter un check pour voir si le visiteur est authentifié ou pas.


---------------
...oups kernel error...
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Methode d'authentification?

 

Sujets relatifs
[PHP] Insérer des valeurs dans une zone de texte [Résolu][PHP] Mise a jour d un cookie
DREAMmx et PHP 3[PHP] Détecter le nom de la page en cours
[PHP-MYSQL]Conversion dateASP & PHP
[PHP] Différentes facon de concevoir un caddie?[PHP] Création de variables dans une boucle et récupération?[Règlé]
[PHP] Passage de paramètre[JAVA] Méthode pour tester si une variable est initialisée ?
Plus de sujets relatifs à : [PHP] Methode d'authentification?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR