SESSION_ID ovvero pagina personale !

Ciao CRIRIC, scusami ma ho provato a fare seguendo l'esempio che mi hai scritto, ma non mi funziona, ho rifatto tutto da zero, creato un login, la verifica, tabella e database, ma proprio non va, ho 2 utenti, e ho chiesto con una query di estrarre il nome dell'utente loggato, ma non mi estrae nulla.
Se sei sicuro che il tuo esempio funziona è possibile che non sia compatibile con il mio file di verifica.php?
grazie ancora






E' li che devi creare la sessione, dopo aver fatto la query per vericare il dati di login metti l'id in sessione

PHP:
if(query di login ha successo) {
  $_SESSION['idUtente'] = $row['idUtente'];
}
nella pagina riservata puoi fare le query usando l'id in sessione
PHP:
if(isset($_SESSION['idUtente'])) {
  $query = "SELECT * FROM articoli WHERE idUtente = " . $_SESSION['idUtente'] ;
}
quando usi le sessioni a inizio pagina devi mettere
PHP:
session_start();
 
Ciao

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:
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:
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

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


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.
 

Discussioni simili