Voor dit voorbeeld ga ik voorbereide instructies weglaten, maar je zult wat onderzoek moeten doen naar het voorkomen van SQL-injectie.
Eerst heeft u een formulier nodig dat de gebruiker moet gebruiken om in te loggen. Hier is een basisformulier dat op een pagina met de naam NewUser.html staat:
<form action="AddUser.php" method="POST">
<p>Enter A Username: </p>
<input type="text" name="User" maxlength="20" size="10">
<br />
<p>Enter A Password: </p>
<input type="password" name="Password" maxlength="40" size="10">
<br />
<p>Enter Password Again: </p>
<input type="password" name="PasswordX2" maxlength="40" size="10">
<br />
<input type="submit" value="Create Account">
</form>
Je kunt natuurlijk andere velden toevoegen, zoals e-mailadres, enz. Maar ik houd het simpel.
Laten we nu naar de AddUser.php-pagina gaan:
<?php
//Now let's grab our $_POST data from our form and assign them to variables...
$User = $_POST['User'];
$PW = $_POST['Password'];
$PW2 = $_POST['PasswordX2'];
//Check whether user put anything in the fields for user or passwords
if (!$User || !$PW || !$PW2) {
echo "You have not entered all the needed info. Please try again.";
exit();
}
//Check if passwords match
if ($PW <> $PW2) {
echo "Your passwords do not match. Please go back and try again.";
exit();
}
//Now we want to be good stewards of passwords and information so let's hash that password
$hash = password_hash($PW, PASSWORD_BCRYPT);
//Open your connection to database
$dbconnect-> blah blah(make your database connection here)....
//Now let's insert the new user into the database - remember do not do this without SQL-injection prevention. I'm just giving you the basics.
$sql = "INSERT INTO UsersTable (UserName, Password)
VALUES ('".$User."', '".$hash."')";
//Verify Successful Entry
if (mysqli_query($dbconnect,$sql)) {
echo "User Added Successfully";
} else {
echo "Error Creating User: " . mysqli_error($dbconnect);
}
echo "<br /><p>Please go to the main page to login now.</p>";
?>
Dus de gebruiker is nu aangemaakt, het wachtwoord is gehashed met een salt en ingevoegd in DB... vergeet SQL-injection niet.
Nu heb je een formulier dat erg lijkt op het formulier NewUser.html om in te loggen, maar het wachtwoord hoeft niet twee keer te worden ingevoerd. Laten we zeggen dat het inlogformulier de gebruiker naar een pagina met de naam login.php stuurt:
<?php
session_start(); //starts a session for tracking user on each page - this has to be on every page
//Let's get our variables from the POST data- will be identical to before most likely
$User = $_POST['User'];
$PW = $_POST['Password'];
//Open your connection to database
$dbconnect-> blah blah(make your database connection here)....
//Let's see if the username and password matches what we have in the database
$sql = "SELECT UsersTable.UserName, UsersTable.Password
FROM UsersTable
WHERE UsersTable.UserName = '$User'";
$result = $dbconnect->query($sql);
//Let's get the hashed password that corresponds to that username
$row = $result->fetch_assoc();
$HashedPassword = $row['Password'];
//Let's verify the password is correct
if (password_verify($PW, $HashedPassword))
{
//if it is correct(true) this will now happen
$_SESSION['verified_user'] = $User; //registers user by storing it in a SESSION
}
else {
echo "Login failed. Try again.";
exit();
}
?>
Een tip, als u toegangsniveaus wilt toevoegen, kunt u een plaats in de database opslaan met een toegangsnummer (bijvoorbeeld:1, 2, 3) en vervolgens bij succesvol inloggen zou u een andere $_SESSION toewijzen die hun toegangsniveau vertegenwoordigt en geeft ze toegang tot bepaalde secties die je toestaat.
Wanneer ze nu naar andere pagina's op uw site navigeren, wordt hun sessie als volgt geverifieerd:
Voorbeeldpagina.php
<?php
session_start();
if (isset($_SESSION['verified_user'])) {
//User is verified and whatever is here will be visible and happen- YAY!
}
else {
echo "You are not logged in and cannot see this page.";
}
?>
Maak er gewoon een gewoonte van om op elke pagina een sessie te starten waar alleen toegang is toegestaan door degenen die zijn ingelogd. Sessies worden van pagina tot pagina onthouden.
Vergeet niet om ze een uitlogpagina te geven die de sessie zal vernietigen:logout.php
<?php
session_start();
unset($_SESSION['verified_user']);
session_destroy();
echo "You are logged out.";
?>