Per questo esempio tralascerò le istruzioni preparate, ma dovrai fare qualche ricerca sulla prevenzione dell'iniezione di SQL.
Per prima cosa è necessario un modulo che l'utente possa utilizzare per accedere. Eccone uno di base che sarà su una pagina chiamata NewUser.html:
<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>
Ovviamente puoi aggiungere altri campi come indirizzo e-mail, ecc, ma sto mantenendo le cose semplici.
Ora andiamo alla pagina AddUser.php:
<?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>";
?>
Quindi ora l'utente è stato creato, la password è stata sottoposta a hash con un sale e inserita nel DB... seriamente non dimenticare l'iniezione SQL.
Ora avrai un modulo molto simile al modulo NewUser.html per l'accesso, ma non richiederà l'inserimento della password due volte. Diciamo che il modulo di accesso invii l'utente a una pagina chiamata login.php:
<?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();
}
?>
Solo un consiglio, se vuoi aggiungere livelli di accesso puoi memorizzare un posto nel database con un numero di accesso (es:1, 2, 3) e poi, dopo aver effettuato l'accesso con successo, assegneresti un'altra $_SESSION che rappresenta il loro livello di accesso e dà loro accesso a determinate sezioni che consenti.
Ora, quando navigano su altre pagine del tuo sito, la loro sessione verrà verificata in questo modo:
EsempioPagina.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.";
}
?>
Prendi l'abitudine di avviare una sessione su ogni pagina in cui l'accesso è consentito solo a coloro che hanno effettuato l'accesso. Le sessioni vengono ricordate di pagina in pagina.
Non dimenticare di fornire loro una pagina di logout che distruggerà la sessione:logout.php
<?php
session_start();
unset($_SESSION['verified_user']);
session_destroy();
echo "You are logged out.";
?>