Ik heb nu een beveiligde pagina. Daarvoor gebruik ik dit script:

<?php
if (!isset($_POST['submit'])) {
   echo '<fieldset><legend>Login</legend>';
   echo '<form name="login" action="' . $_SERVER['PHP_SELF'] . '" method="post">';
   echo '<input type="text" class="text" size="12"  name="user" />&nbsp;';
   echo '<input type="password" class="text"  size="12" name="pass" />&nbsp;';
   echo '<input type="submit" name="submit" value="Log in!" class="text" />';
   echo '</form>';
   echo '</fieldset>';
} else {
   include("connect.php");
   $sql = "SELECT * FROM users WHERE user='" . $_POST['user'] . "' AND pass = '" . md5($_POST['pass']) . "'";
   $result = mysql_query($sql);
   if (mysql_num_rows($result) == 1) {
      echo 'user gevonden en wachtwoord is correct';
      $_SESSION['user'] = $_POST['user'];
      $_SESSION['pass'] = $_POST['pass'];
  echo '<a href="check2.php">droog</a>';

   } else { 
      echo '<h1>Verkeerde gebruikersnaam of verkeerd wachtwoord!</h1> <a href="index.php">Probeer opnieuw</a>'; 
   }
}
?>


Maar als ik nu naar 'check2.php' ga, die ook deze code bevat, dan moet ik weer opnieuw inloggen. Hoe kan ik dat verhelpen?

[edit]&lt;?php en ?&gt; toegevoegd[/edit]
Is dit het hele script?

Zo ja, dan ontbreekt session_start() erin. Dat zul je aan het begin van je script moeten zetten als je verderop met sessies wilt werken...

Op check2.php zet je dan ook session_start() en kun je van de variabelen die je in een sessie opgeslagen hebt gebruik maken...
En waarom zet je een wachtwoord in de sessie? Wachtwoorden gebruik je bij het inloggen en daarna nooit meer. Het is dus volkomen onzinnig om dit gegeven in een sessie te zetten met ook nog eens het risico dat je sessie wordt gehijackt.
Oke bedankt:-) Het werkt nu inderdaad!

En hoe kan ik een uitlog-functie maken? Als ik deze code gebruik:

<?php
$_SESSION = array();
session_destroy();
echo 'Je bent succesvol uitgelogd!'
?>

Krijg ik deze output:


Warning: session_destroy(): Trying to destroy uninitialized session in /home/borisbez/domains/xxx.nl/public_html/login/loguit.php on line 3
Je bent succesvol uitgelogd!

Hoe kan ik dit verhelpen?
Volgens mij zegt de foutmelding genoeg.
De sessie lijkt nog niet geset te zijn.
session_destroy() hoef je niet meer te gebruiken, $_SESSION = array() is voldoende...
ik zou niet sesion_destroy() gebruiken maar unset($_SESSION['sessie_naam']);

voor het geval als je later met andere sessies gaat werken!
die fout heb ik namelijk gemaakt met een spel dat als je een crime had gepleegd dan moest je een uur wachten en die tijd werd opgeslagen in een sessie dus wat deden die gasten die logten gewoon uit en daarna weer in en dan konden ze gewoon weer een crime doen:S en ik ondertussen maar zoeken:S{-_-}
@Devon: Door de browser te sluiten vernietig je ook alle sessies. Jij hebt dus nog steeds een lek in jouw crime-spel zitten. Gebruik een database om het tijdstip op te slaan en controleer bij iedere crime of er al voldoende tijd is verstreken t.o.v. de vorige crime. Zie de vele datum- en tijdfuncties van MySQL in hoofdstuk 12.5 van de handleiding.
Oke bedankt.
<?php
session_start();
if (!isset($_SESSION['user'])) {
   echo '<fieldset><legend>Login</legend>';
   echo '<form name="login" action="' . $_SERVER['PHP_SELF'] . '" method="post">';
   echo '<input type="text" class="text" size="12"  name="user" />&nbsp;';
   echo '<input type="password" class="text"  size="12" name="pass" />&nbsp;';
   echo '<input type="submit" name="submit" value="Log in!" class="text" />';
   echo '</form>';
   echo '</fieldset>';
   if (!isset($_POST['submit'])) {
      include("connect.php");
      $sql = "SELECT * FROM users WHERE user='" . $_POST['user'] . "' AND pass = '" . md5($_POST['pass']) . "'";
      $result = mysql_query($sql);
      if (mysql_num_rows($result) == 1) {
         $_SESSION['user'] = $_POST['user'];
         echo 'Je bent succesvol ingelogd! <br />';
         echo '<a href="index.php">Klik hier om door te gaan</a>';
      } else { 
         die('<h1>Verkeerde gebruikersnaam of verkeerd wachtwoord!</h1> <a href="index.php">Probeer opnieuw</a>'); 
      }
   }
} else {
   echo 'Je bent al/nog ingelogd! Klik <a href="loguit.php">hier</a> om uit te loggen.';
}
?>


Dit is nu mijn code, maar nu is het zo, dat als de sessie niet is ge-set, en post['submit'] ook niet, dat hij weergeeft: Verkeerde gebruikersnaam of verkeerd wachtwoord!
Probeer opnieuw. Dat moet ik niet hebben! Hoe verander ik dat?
Als ik het zo lees zou het moeten werken als je het uitroepteken (!) op regel 11 verwijderd. Je wilt namelijk juist dat dat stuk code uitgevoerd wordt als er wel op submit geklikt is...

Reageren