Hantera sessions i PHP del (2/2)
Förord
Då var det dags för den andre och avslutande artikeln i denna serie. I den här delen tänker jag gå igenom om hur du kan skapa ett enkelt inloggningssystem med hjälp av sessions i PHP. Innan du ger dig på den här artikeln så rekommenderar jag dig verkligen att du läser del ett först, för annars lär du inte förstå speciellt mycket om du inte är en van PHP-programmerare.Innehåll
»»
»
»
»
»
»
Relaterade artiklar
» Hantera sessions i PHP (del 1/2)
Planering
Innan man börjar med ett PHP-script som kräver fler än 3-4 sidor så är det smidigt om man planerar lite först. Hur många filer kan vi tänkas behöva? Vilka funktioner krävs? Har vi tillgång till någon databas? Vad kan vi tänkas ha problem med? Och så vidare. Listan kan göras lång.Till att börja med så behöver vi fyra olika PHP-filer. Vi behöver en inloggningssida där man fyller i ett användarnamn och ett lösenord, denna fil har jag valt att döpa till ”index.php”. Sedan behöver vi en fil som loggar in användaren, och kontrollerar om användarnamnet och lösenordet stämmer – givetvis, denna fil kallar jag ”login.php”. När användaren sedan väl är inloggad så behöver vi också en sida som han/hon ska komma till, denna sida kallar vi ”index_online.php”. Den fjärde och sista filen kallar vi för ”logout.php”, och ska i princip bara logga ut användaren och slussa tillbaka den till inloggningssidan – ”index.php”.
Första filen – index.php
Den första filen skulle lika gärna kunna vara en vanlig HTML-fil, då den inte innehåller någon som helst PHP-kod. Som jag beskrev i den lilla planeringen ovan så ska den endast innehålla två fält där man kan skriva in sitt användarnamn och lösenord. Så här kan den se ut:
Vad som är viktigt på denna sida kan man säga är två saker. För det första måste man se till att vi skickar vidare besökaren till rätt sida efter han/hon fyllt i sina inloggningsuppgifter. Därefter måste vi namnge de två fälten så att vi kan plocka upp de data som besökaren fyller i där sedan. Annars så ska det nog inte vara några som helst konstigheter med den här filen!
Inloggningsfilen – login.php
Den här filen kan nog vara något mer intressant, det är nämligen här vi ska kontrollera om inloggningsuppgifterna är korrekta samt slussa vidare besökaren om de stämmer. Vi börjar med att skapa två variabler ”$username” och ”$password”, som ska innehålla de inloggningsuppgifter som besökaren ska knappa in för att komma vidare. Därefter kontrollerar vi om besökaren inte bara knappat in ”login.php” i adressfältet, i så fall skickar vi tillbaka besökaren till inloggningssidan. Vi kontrollerar även om inloggningsuppgifterna är korrekta, vi sätter då igång sessionmotorn och registrerar en variabel som ska hålla koll på besökaren samt slussar vidare honom/henne till ”index_online.php”.
< ?php
$username = "a"; //användarnamn
$password = "a"; //lösenord
if(isset($_POST["frm_user"]) && isset($_POST["frm_pass"]))
{
if($_POST["frm_user"] == $username && $_POST["frm_pass"] == $password)
{
//användarnamnet och lösenordet var korrekt, startar session motorn
session_start();
//registrerar en varibel så vi kan hålla koll på besökaren
$userid = $username;
session_register("userid");
//skickar besökaren till inloggningssidan
header("Location: index_online.php");
} else {
//användarnamnet eller lösenord var fel, vi skickar tillbaka besökaren till inloggningssidan
header("Location: index.php");
}
} else {
//besökaren har trorligtvis knappat in login.php i webbläsaren, vi skickar tillbaka honom/henne till inloggningssidan
header("Location: index.php");
}
?>
Som ni ser så har jag lagt in en hel del kommentarer här, så programmeringskoden bör inte vara så speciellt svår att förstå.
Indexsidan – index_online.php
Det här är sidan man kommer till om man knappat in korrekta inloggningsuppgifter. Den största funktionen på den här sidan är egentligen att den kontrollerar om besökaren som kommer till sidan verkligen är inloggad. Skriver han/hon in ”index_online.php” så ska den ju inte gå att komma åt om han/hon inte knappat in rätt inloggningsuppgifter före, så därför gör vi denna koll. Vi skriver även ut användarnamnet i en hälsningsfras överst på denna sida.
session_start();
if(!(session_is_registered('userid')))
{
//användaren är inte inloggad, skickar tillbaka honom till inloggningssidan
header("Location: index.php");
}
?>
Hej =$_SESSION["userid"];?>!
Du är nu inloggad i detta inloggningssystem.
Klicka på logga ut för att logga ut!
Logga ut!
Observera att jag även klämmer in en liten länk här till logga ut-sidan, som vi ska beskriva här näst.
Utloggningssidan – logout.php
För att spara lite på kraften hos servern så ser vi även till att det finns en logga ut funktion i vårt inloggningssytem. Den här filen raderar samtliga variabler som registrerats för den specifika besökaren och skickar vidare honom/henne tillbaka till inloggningssidan igen.
session_start();
//raderar samtliga sessionvariabler för denna besökare
session_destroy();
//skickar tillbaka honom till inloggningssidan
header("Location: index.php");
?>
Gäst Konto
Det har kommit med ett litet mellanslag mellan "<" och "?php" i början på Inloggningsfilen - login.php. I praktiken skulle det medföra att både användarnamn och lösenord avslöjas i webbläsaren. Men givetvis förstår jag att det bara råkade komma med ett extra mellanslag nu när författaren skrev artikeln, för överallt annars sitter märket
Jonathan Wening
Det står följande i koden: if (!(session_is_registered('min_variabel'))) { echo $_SESSION["min_variable"]; } else { echo "Variabeln är inte registrerad!
\n"; } och det betyder ju att om session INTE är registrerad så ska koden skriva den registrerade variablen, vilket kommer leda till ett fel. Dessutom står det min_variabel på ett ställe och min_variable på det andra Jag testade koden för att vara säker och då händer ingenting eftersom den försöker skriva ut en variable som inte är registrerad. Skulle du nu ha min_variabel registrerad skulle jag få fel-medellandet "Variabeln är inte registrerad!" Annars bra artikel, går genom grunderna bra! MVH Jonathan