login  Naam:   Wachtwoord: 
Registreer je!
 Tutorials

Tutorials > PHP


Gegevens:
Geschreven door:
Martijn
Moeilijkheidsgraad:
Normaal
Hits:
41439
Punten:
Aantal punten:
 (4.5)
Aantal stemmen:
6
Stem:
Niet ingelogd
Nota's:
 Lees de nota's (16)
 

Tutorial:

Simpel inlog script met sessies

1. Introductie
2. Wat heb je nodig?
3. Form
4. Php
5. Ingelogd zijn
6. Uitloggen
7. Einde


1. Introductie
Ik heb deze tutorial gemaakt omdat ik vond dat er teveel ingewikkelde tutorials zijn, die allemaal bijzonder veel kunnen en daardoor niet echt overzichtelijk meer zijn.
Ik ga vanaf hier zo duidelijk mogelijk proberen uit te leggen hoe je een simpel inlog script maakt. Als je iets niet snapt, je kunt op de meeste functies klikken en dan word je doorverwezen naar php.net, en die weten veel.

Ik zou ook willen vragen om te stemmen hoe goed je het vond, en als je een suggestie hebt deze bij de nota's te plaatsen Als je 3 of lager stemt zou ik zeer graag willen weten waarom.

top
2. Wat heb je nodig?
Ik ga er een beetje van uit dat een een basis kennis bezit van PHP, html en mySql. Ik ga niet uitleggen hoe je een database in elkaar moet schuiven, alleen dat je een tabel genaamd members hebt met de volgende kolommen: id (INT, auto_increment) naam (varchar 50) wachtwoord (varchar 45) Verder ga ik er vanuit dat je je wachtwoord goed opslaat in een database, dus met md5() of sha1(). Ook dat je enig kennis bezig van input controles. Indien je dat NIET kan, raad ik aan dat je daar even een tutorial over opzoekt.
En uiteraard moet dit op een server worden gezet, dit kan niet zomaar op je pc'tje thuis.

top
3. Form
Dit is niet zo lastig. We maken een formuliertje waar je je naam en wachtwoord mag invullen, stelt verder weinig voor.
Begin met een bestandje aan te maken, genaamd index.php. Zet daarin deze code:
<form method="post">
Naam: <input type="text" name="loginNaam" />
Wachtwoord: <input type="password" name="loginPass" />
<input type="submit" name="loginSubmit" value="Log in!" /> 
</form>
Niets lastigs daar dus. Je kan er ook netjes divjes/tabellen omheen zetten om mooi te maken, maar for now is dit voldoende.

top
4. Php

En dan komt nu het lastigere deel, namelijk de code maken dat het gaat werken.
Je begint door helemaal bovenaan dit neer te zetten:
session_start();
// hier straks meer code
?>
de session_start MOET VOOR ELKE OUTPUT. Al is het een spatie, dan krijg je een error. Er mag php boven staan, maar de php mag bv geen echo doen iod. Voor de wat gevorderde onder ons, eigenlijk is zeggen dat er geen tekst oid voor mag onvoldoende. Je mag namelijk geen headers hebben gestuurd. Als je een cookie set doe je dit ook al.

That being said, gaan we eerst kijken of je misschien al ingelogd ben, zo ja dat je word doorverwezen naar main.php, de pagina die we gaan gebruiken voor als je ingelogd bent en nog niet 15min inactief bent geweest. Deze code moet na de session_start van hierboven, anders kun je de $_SESSION waardes niet gebruiken:
if(isset($_SESSION) && $_SESSION['lastActive']>time()+60*15){ // er is een sessie EN je bent in laatste 15 min actief geweest
  $_SESSION['lastActive']=time(); // Je klikte, dus laatst actief updaten
  header("Location: main.php"); // Doorverwijzen naar je ingelogde pagina
  exit; //en netjes je header sluiten
  }//--einde van de if
De $_SESSION waardes zijn gewone $variabelen, alleen onthouden ze hun waarde ookal ververst de pagina. Daarom kan je dus je lastActive tijd mooi onthouden.

Nou, dat is al een best begin. Al heb je nog geen idee of het werkt, want er is nog niets wat je laat inloggen, laten we dat is gaan maken dan. Dit zet je weer onder de vorige code.
LET OP! Ik ga hieronder geen beveiligingen in maken om het overzichtelijker te houden. Het is zeer aan te raden (eigenlijk verplicht) dat je dit wel doet!


if(isset($_POST['loginSubmit'])){ // er is op de loginknop gedrukt
      if(empty($_POST['loginNaam'])){echo"Je hebt geen naam ingevuld!";}
  elseif (empty(
$_POST['loginPass'])){echo"Je hebt geen wachtwoord ingevuld!";}
  else{ 
//dus netjes ingevuld
    $sLid mysql_query("SELECT id,naam FROM leden 
                         WHERE naam='"
.$_POST['loginNaam']."' AND password='".md5($_POST['loginPass'])."'
                         LIMIT 1"
) or die(mysql_error());
  if(
mysql_num_rows($sLid)==0){echo"Deze inlog gevens zijn incorrect!";}/// Niet vertellen wat er fout is, alleen dat het fout is, ivm 'hackers'
  else{
    $fLid mysql_fetch_assoc($sLid); //haal de gegevens op van het lid 
    $_SESSION['user_id'] = $fLid['id']; // De id die we hebben gevonden doorgeven aan een sessie waarde, want die onthoud het
    $_SESSION['user_naam'] = $fLid['naam']; // Ook een naam mee geven, niet verplicht,wel handig
    $_SESSION['lastActive'] = time(); // je bent actief, dus tijd opslaan
    header("Location: main.php"); // je bent ingelogd nu, dus door verwijzen naar de ingelogd pagina
    exit; // en weer netjes je header sluiten 
    }//--einde wel bestaan 
  }//--einde netjes ingevuld 
}//--einde van de if inlogsubmit

Nou, dat was eigenlijk het moeilijkste stukje. Nu heb je sessie waardes ingevuld en ben je ingelogd doorverwezen naar main.php
top
5. Ingelogd zijn

Gezellig, nu ben je op main.php. Maarja, wat nu? Nou, nu gaan we wat met de info doen. Weer zet je eerst de session_start neer, want we gaan weer met sessies werken.
Daarna moet je zelf weten wat je met de sessie waardes gaat doen. Maar toch zal ik voor het gemak even een voorbeeldje plaatsen, zodat je een richting ziet waarin je moet zoeken:
session_start(); // sessie starten (of in dit geval doorgaan)
if(!isset($_SESSION) || $_SESSION['lastActive'] <time()-60*15){ // geen sessie of je bent 15 minuten inactief geweest
  unset($_SESSION); // sessie waardes leegmaken
  session_destroy(); // sessie beindigen
  header("Location: index.php"); // terug verwijzen naar den inlog pagina
  exit; // en weer netjes je header sluiten
  }//--einde dat je uitgelogd moet worden 
else{//je mag dus ingelogd blijven
  $_SESSION['lastActive'] = time(); //Bij elke klik word nu je tijd opgeslagen
  $sInfo mysql_query("SELECT id,naam FROM members 
                          WHERE id="
.$_SESSION['user_id']." LIMIT 1") or die(mysql_error()); //info zoeken
  $fInfo mysql_fetch_assoc($sInfo); // informatie bruikbaar maken
  }//--einde dat je ingelogd mag blijven 
?>


Yes je bent ingelogd!


Hey echo $fInfo['naam'];?>!
 


top
6. Uitloggen

Met een beetje succes heb je nu een script waar mee je kunt inloggen. Nu nog uitloggen. Dit is nog veel simpeler dan inloggen.
Maak eerst een bestand aan genaamd uitloggen.php, en zet daar dit in:
      $_SESSION = array(); // lege array van de sessie maken
   
session_destroy(); // beindig de sessie
   
header("Location: index.php"); //terug verwijzen naar de inlog pagina
   
exit; //en je header netjes afsluiten
   
?>


top
7. Einde

Nou, dit was de tutorial, als je het rustig leest val het allemaal wel mee, je moet het alleen even doorhebben.
Martijn Vooges,
http://MartijnVooges.net

top

« Vorige tutorial : Beveiliging in scripts

© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.018s