
Originariamente Scritto da
alessandro1997
Ma non hai un login funzionante? La verifica dei dati dovrebbe venire eseguita lì. Se vuoi invece eseguirla in ogni pagina per vedere se i valori in sessione corrispondono ancora a quelli dell'utente nel database (un amministratore potrebbe aver cambiato la password dell'utente nel frattempo) ti consiglio di creare una funzione che automatizzi il processo:
Codice PHP:
function checkUser($username, $password)
{
// ottieni un'istanza di $pdo in qualche modo, come parametro della funzione
// oppure usando l'iniezione delle dipendenze, ma evita le variabili globali
$stm = $pdo->prepare('SELECT * FROM users WHERE username = :username AND password = MD5(:password)');
$stm->execute(array(
':username' => $username,
':password' => $password,
));
return ($stm->rowCount() == 1);
}
Quindi in cima alle tue pagine inserirai:
Codice PHP:
<?php
if (!checkUser($_SESSION['username'], $_SESSION['password'])) {
// onestamente qui sono indeciso se utilizzare 401 Unauthorized
// oppure 403 Forbidden, vedi un po' tu
header('HTTP/1.0 401 Unauthorized');
header('Location: login.php');
exit();
}
// ...
?>
Ciao,
Ho provato solo ora il tuo codice e mi da il seguente errore:
Fatal error: Call to undefined function checkUser() in /volume1/web/utenti/fabio/provasessionialivelli/login.php on line 5
Ti posto qua come ho fatto tante volte avessi sbagliato:
checkUser.php
Codice PHP:
<?php
require_once("connetti.php");
function checkUser($username, $password)
{
// ottieni un'istanza di $pdo in qualche modo, come parametro della funzione
// oppure usando l'iniezione delle dipendenze, ma evita le variabili globali
$stm = $pdo->prepare('SELECT * FROM utenti WHERE username = :username AND password = MD5(:password)');
$stm->execute(array(
':username' => $username,
':password' => $password,
));
return ($stm->rowCount() == 1);
}
?>
login.php
Codice PHP:
<?php
require_once("connetti.php");
if(isset($_POST['log'])){
if (!checkUser($_SESSION['username'], $_SESSION['password'])) {
// onestamente qui sono indeciso se utilizzare 401 Unauthorized
// oppure 403 Forbidden, vedi un po' tu
header('HTTP/1.0 401 Unauthorized');
header('Location: login.php');
exit();
}
}
?>
<center>
<h2>DIGITARE USERNAME & PASSWORD. PREMERE <a href="iscrizione.php"> QUI</a> </h2>
<form action= "<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<font face="Comic Sans MS">
Username: <input type="text" name="username" maxlength="30" size ="32"> <br /> <br />
Password: <input type="password" name="password" maxlength="12" size ="14"><br /><br />
</font>
<input type="submit" name="log" value="Loggati" />
</center>
</form>
<!-- qui il tag center (obsoleto) era indentato col form -->
</center>
</body>
</html>
Tante volte vedi se hai tempo di dargli un'occhiata te ne sarei grato.