Newsgroup: it.comp.www.php
Titolo: Autenticazione Utente

Salve a tutti. Eccomi ancora qui a chiedere il vostro aiuto!
Avrei un problema: come autenticare un utente? Mi spiego meglio...
Ho un database mysql e voglio creare una pagina di login per permettere 
l'accesso con nome utente e password.
In seguito, poichè non voglio tenere aperta la connessione al database 
(effettuata nella pagina di login), ma credo sia meglio aprirla e 
chiuderla solo prima/dopo un'operazione, ho bisogno di sapere quali sono 
username e password con cui l'utente si è loggato...
Il problema è che le operazioni sono eseguite da altri script, diversi 
da quello di login.
Ho provato a recuperarle dall'array $_POST ma non funziona in quando, 
credo, abbia scope all'interno di un solo script.
Ho provato a definirle global, ma anche qui non ha funzionato.
Ho provato a leggere Autenticazione HTTP usando PHP 
(
http://it.php.net/manual/it/features.http-auth.php
) ma qui le 
credenziali vengono inserite in $_SERVER, e se non ha funzionato con 
$_POST dubito che così vada bene...
Ora mi rimane da vedere cosa sono le sessioni, perchè a naso dovrebbe 
essere qui la soluzione, ma prima preferivo chiedervi i metodi usati da 
voi..
Grazie mille a tutti!

 Grazie mille a tutti!
Per mantenere lo stato tra una pagina e l'altra, visto che http è stateless, 
hai 3 modi sostanzialmente:
1-passare variabili in continuazione da una pagina all'altra (e questo è 
fattibile ma in pratica non ha senso usarlo)
2-utilizzare i cookies
3-utilizzare le variabili di sessione
La differenza è che la variabile di sessione ($_SESSION) risiede sul server, 
mentre il cookie risiede in locale.
A seconda delle esigenze puoi usare uno dei due o persino entrambi.
Perciò per capire dove vanno a finire i dati del tuo login guarda l'action 
del form della pagina da cui un utente si logga, recupera la pagina a cui i 
dati sono diretti e vedi cosa viene fatto delle due variabili che vengono 
passate.
E' facile che se i campi di testo si chiamano username e password, troverai 
qualcosa tipo $_POST['username'] e $_POST['password'] da qualche parte, ed è 
probabile che dopo averli controllati (injection, lunghezze e quant'altro) e 
dopo aver fatto una query per verificare che l'utente sia nel db, lo script 
metta tutto in un coockie o in una variabile di sessione.
Ti consiglio di approfondire un po' gli argomenti passaggio di variabili in 
HTML, gestione di sessioni e cookies con php e connessioni con mysql, perchè 
finchè non hai un'idea chiara di quello che succede, diventa difficile 
gestire bene qualcosa.
Ciao,
Fabrizio

Fabrizio Romano ha scritto:

In realtà lo script e la pagina html di login l'ho fatto io :P e quindi, 
per ora le avevo solo memorizzate in 2 variabili. :)
MA sei stato precisissimo, e ti ringrazio molto.
Credo di dirigermi sui cookie, ma ora mi studio un po meglio le relative 
guide :D
Grazie ancora!

Fabrizio Romano ha scritto:

Tra l'altro, ingenuamente ho pensato che il modo per verificare se 
l'utente c'è nel database sia questo:
$user=$_POST['user'];
$pass=$_POST['pass'];
$connection=mysql_connect($db_host, $user, $pass);
if (!$connection)
     echo "Errore: ". mysql_error();
   else {
         echo "Login Corretto";
         mysql_close($connection);
         header("Location: homepage.htm");
        };
Ma sono certo che esistono modi ben più eleganti :)
Voi come fareste?

         header("Location: homepage.htm");
ti funziona?
non in locale, su web...
ciao
Fio 

Ad esempio: Valeria Dal Monte ha scritto:

Grazie mille!
Credo di si, in effetti conviene che l'utente inserisca la password ogni 
volta e quindi evitare di memorizzarla nella sessione.
Non saprei, ancora non ho avuto modo di provare il tutto sul web, è 
chiaro che dovrò apportare molte modifiche quando sarà, ma chi mi ha 
chiesto questo "lavoro" non mi ha ancora messo a disposizione uno spazio 
web :)
In ogni caso, per vedere se un'utente c'è, faccio bene ad utilizzare
$connection=mysql_connect($db_host, $user, $pass);
if (!$connection)....
ecc ecc ??
O esiste qualcosa tipo SELECT USER... ?
Grazie mille!!!


quello dipende se l utente va nel database o se hai una tabella nel database 
con i partecipanti
SELECT eccc
nel manuale di php cerca mysql che ti fa vedere le funzioni.
la mysqli nn và con php4. Informati
ciao

        };
Mi sembra che ci sia un po' di confusione:
 > $user=$_POST['user'];
 > $pass=$_POST['pass'];
Questi dovrebbero essere nome utente e password dell'utente, scelti 
dallo stesso e memorizzati in una riga di una tabella di un database.
 > $connection=mysql_connect($db_host, $user, $pass);
Qui, invece, $user e $pass rappresentano le credenziali di accesso 
dell'utente a nome del quale viene interrogato il database. Strettamente 
privati e NON accessibili all'utente finale, che NON deve conoscerli, nè 
tanto meno poterli scegliere o modificare (a meno che non si tratti di 
un parente o affine entro il secondo grado...)

Marco ha scritto:

In effetti da ciò che dici devo aver fatto un po di confusione :|
Io pensavo che nel database dovrebbero esserci memorizzati alcuni 
utenti: un Admin con relativa password (che sarei io) ed altri utenti 
con relativa password, con permessi di solo editing dei dati (insert, 
select ecc)
La connessione sarà effettuata con questi utenti "utilizzatori"  e 
quindi $user e $pass sono relative ad essi...
Non è così??? :|

 Non è così??? :|

Marco ha scritto:

AAAHHhhh....
Ecco ora ho capito cosa intendevi.
In effetti no, non ce l'ho... Rimedierò subito.
Ma a questo punto: gli utenti previsti da mysql, che funzione hanno?
Qual'è la differenza concettuale tra gli utenti con i privilegi gestiti 
da mysql e gli utenti che gestisco io tramite una eventuale tabella utenti??
In ogni caso ringrazio ancora tutti per l'aiuto!!

 utenti??
Immagina una scuola (è tempo di preiscrizioni).
C'è un segretario che registra le iscrizioni (ma non è un utente), e ci 
sono gli aspiranti allievi che si vanno a iscrivere (i tuoi utenti, che 
però non sono segretari, quindi possono chiedere di essere iscritti, ma 
non iscrivere personalmente le persone).
Pensa cosa succederebbe se chi si vuole iscrivere a scuola dovesse 
segnarsi personalmente su un registro ufficiale: qualche buontempone 
potrebbe cancellare tutte le altre iscrizioni, per esempio...
Invece tu mi dici chi sei, chiedi di essere iscrito, il segretario 
controlla i tuoi dati, e se sono corretti ti registra (e, in futuro, 
controlla se sei stato iscritto oppure no).

Marco ha scritto:

Ecco.. l'esempio è stato molto chiarificatore :)
Quindi in parole povere:
mysql è la scuola, gli utenti con i permessi di INSERT, SELECT ecc 
(anche se nel mio caso sarà uno solo) sono i segretari.
La tabella utenti è il registro degli allievi iscritti i quali però 
effettuano solo il login, non agiscono direttamente sul database, ma 
chiedono al segretario di effettuare per loro qualsiasi operazione sul 
database...
Poi c'è il preside con i pieni privilegi, che può licenziare il 
segretario, e persino abbattere la scuola :)
Ora credo sia tutto chiaro...:)
Grazie ancora!!!

Paolo Capasso ha scritto:

Aspè :D
In questo istante mi è venuto un altro dubbio.....
 >>Pensa cosa succederebbe se chi si vuole iscrivere a scuola dovesse 
 >>segnarsi personalmente su un registro ufficiale: qualche buontempone 
 >>potrebbe cancellare tutte le altre iscrizioni, per esempio...
Beh, in realtà ciò che voglio realizzare è che tutti gli utenti possano 
visualizzare il contenuto del database, senza effettuare alcun login, 
mentre solo il gestore può inserire/cancellare/modificare il database..
Quindi questo buontempone deve poterlo fare :|
Perdonami se sembro cocciuto, è la prima volta per me :P (e questi 
concetti non li ho trovati in nessuna guida...)