login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Inlog Probleem

Offline sicco - 08/08/2005 09:40 (laatste wijziging 08/08/2005 09:41)
Avatar van siccoLid heey mensen, ik heb voor mijn admin een inlog systeem die gebruikt maakt van sessions, alleen als ik inlog en vervolgens door ga naar index.php staat er weer dat ik niet ingelogt ben 

ik heb dit als inloggen.php:

  1. <?
  2. ?>
  3. <?php
  4. include('config.php');
  5.  
  6. if($submit){
  7.  
  8. mysql_connect($host,$gebruikersnaam,$wachtwoord);
  9.  
  10. $sql = "SELECT * FROM admin WHERE ww = '" . $_POST['wachtwoord']. "' AND nickname = '" . $_POST['nickname']. "' LIMIT 1";
  11. $query = mysql_query($sql) or die(mysql_error());
  12.  
  13. if (mysql_num_rows($query) == 1){
  14. $naam = ucfirst($_POST[nickname]);
  15.  
  16. $_SESSION['admin'] = "$naam";
  17. echo "Je bent ingelogd "; echo $_SESSION['admin']; echo "!<br>Klik <a href=\"index.php\">hier</a> voor de Admin.";
  18. }elseif (mysql_num_rows($query) == 0){
  19. $tekst = "Je bent niet ingelogd!<br>Klik <a href=\"inloggen.php\">hier</a> en probeer het opnieuw!";
  20. echo "$tekst";
  21. }}else{
  22. ?>
  23. <FORM name="login" METHOD="post" ACTION="<? $PHP_SELF ?>">
  24. <table width="276" cellspacing="0" cellpadding="0">
  25. <tr>
  26. <td width="112">Nickname:</td>
  27. <td width="162">
  28. <input type="text" name="nickname" size="25">
  29. </td>
  30. </tr>
  31. <tr>
  32. <td width="112">Wachtwoord:</td>
  33. <td width="162">
  34. <input type="password" name="wachtwoord" size="25">
  35. </td>
  36. </tr>
  37. <tr>
  38. <td width="112">&nbsp;</td>
  39. <td width="162">&nbsp;</td>
  40. </tr>
  41. <tr>
  42. <td width="112">&nbsp;</td>
  43. <td width="162">
  44. <input type="submit" name="submit" value="Inloggen">
  45. <input type="reset" name="reset" value="Legen">
  46. </td>
  47. </tr>
  48. </table>
  49. </FORM>
  50. <?php
  51. }
  52. ?>


en dan vervolgens heb ik boven aan mijn index dit staan

  1. <?
  2.  
  3. if($_SESSION['admin'] != ""){
  4. ?>


en onderaan de pagina

  1. <?
  2. }
  3. else{
  4. echo ("U bent niet ingelogd!<br>");
  5. echo ("<a href=\"inloggen.php\">Klik hier</a> om in te loggen."); }
  6. ?>

Het zou toch gewoon moeten merken of zie ik dat nu verkeert

7 antwoorden

Gesponsorde links
Offline Legolas - 08/08/2005 09:50 (laatste wijziging 08/08/2005 09:51)
Avatar van Legolas Onbekend session_start(); helemaal bovenaan bij index.php.

Dat betekent namelijk dat de sessie óf gestart wordt of wordt voortgezet;-)
Offline sicco - 08/08/2005 10:04
Avatar van sicco Lid bedankt, het zijn van die kleine foutjes toch altijd heh 
Offline xSc - 08/08/2005 10:12 (laatste wijziging 10/08/2005 08:17)
Avatar van xSc Onbekend Sicco, ik vind het vervelend om te zeggen, maar dit script is bar slecht.

Om maar eens wat op te noemen:

- Mogelijkheid tot SQL-injection.
- Wachtwoord wordt niet-gecodeerd opgeslagen.
- Niet consequent gebruik van super globals.
- Onjuist quote-gebruik.
- Geen goede foutafhandeling.
- Variabelen tussen quotes.
- ob_start() gebruiken om bijv. onjuist gebruik van een header() te rechtvaardigen, moet je echt afleren. Het is absoluut niet netjes.

Verder is dit geen inlogscript. Een inlogsysteem is meer dan alleen controleren of een waarde overeenkomt en vervolgens een sessie starten.

Tips:
- Sla geen gebruikersnaam / wachtwoord op in een sessie of cookie, maar sla alleen het lid_id op. Aan de hand van het lid_id kun je alles nakijken.
- Gebruik voor het opslaan de functie md5() van PHP. Die gebruik je dan ook voor het vergelijken:

  1. <?php
  2.  
  3. if (!$rLogin = mysql_query("SELECT lid_id FROM leden WHERE wachtwoord = '" . md5($_POST['wachtwoord']) . "'"))
  4. {
  5.  
  6. echo 'Combinatie gebruikersnaam / wachtwoord onjuist';
  7.  
  8. }
  9. else
  10. {
  11.  
  12. // juist ingelogd; start sessie
  13.  
  14. }
  15.  
  16. ?>


Natuurlijk bouw je een functie, waarmee je bij elke pagina controleert of de betreffende persoon ingelogd is. Je slaat bijv. het lid_id op, het ip-adres, evt. een controle getal. Mooi is ook om de database erbij te gebruiken. De gegevens in je sessie sla je ook in de database op. Je kunt dan controleren of het lid_id uit de sessie overeenkomt met het lid_id in de database. Ook kun je controleren of het ip-adres in de sessie overeenkomt met het ip-adres in de database het $_SERVER['REMOTE_ADRR']. Hetzelfde geldt natuurlijk voor het eventuele controle-getal. Op deze manier maak je een (behoorlijk) veilig systeem.

Succes!
Offline BigBug - 08/08/2005 10:23
Avatar van BigBug PHP expert @ Henri,

De 1 vindt variabelen buiten quote's beter en de ander vindt variabelen binnen quote's beter.. Wat is nouw het best (reactie van alle leden plz..)
Offline xSc - 08/08/2005 10:31
Avatar van xSc Onbekend @Bigbug, normaal gesproken is het beter om buiten de quotes te houden. Het is trouwens ook sneller.
Offline Gerard - 08/08/2005 11:21
Avatar van Gerard Ouwe rakker Variabelen altijd buiten de quotes houden.
Offline Legolas - 08/08/2005 12:06
Avatar van Legolas Onbekend ik ben het met proximus en henri eens omdat arrays binnen de quotes worden genegeerd, dus das alleen maar lastig. verder is het slordig:s
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.337s