Newsgroup: it.comp.www.php
Titolo: Sezione protetta...

Ciao a tutti, sto sviluppando un sito (php+mysql) e sono giunto all'area di
amministrazione dove si potranno usare script per modificare le news e
alcune cose del sito. Ho provato un paio di script giŕ pronti per
risparmiare un po' di tempo, ma alla fine per avere una cosa efficiente e
che conosco bene ho deciso di fare tutto da zero. Vorrei lavorare con le
sessioni ma non l'ho mai fatto, quindi qui di seguito racconto come vorrei
procedere per vedere se faccio bene o no. 
Alla sezione di amministrazione si accede con user e password da inserire in 
un form.
Vengono confronatate con user e password contenuti in un db (criptati,
almeno la password, con md5).
Se va bene imposto un id e un nome per riconoscere la sessione. In ogni
pagina da proteggere includo uno script che controlla se l'id e il nome
della sessione avviata coincide con quello impostato (in un altra pagina
php), se sě visualizzo la pagina altrimenti esco distruggendo la sessione e
tutto ciň che vi č correlato.
Puň funzionare o č fantascienza? O ho detto un mucchio di strunzate?
Suggerimenti?
Grazie a tutti

 Grazie a tutti
Può andare ma basta l'id.
Io faccio così:
quando l'utente autenticato accede salvi l'id di sessione in una variabile
di sessione:
session_start();
// codice controllo utente
$_SESSION['sessionid'] = session_id();
nelle pagine successive verifichi se ciò è avvenuto, quindi:
session_start();
if ($_SESSION['sessionid'] != session_id()){
    session_destroy();
    exit();
}
Tendenzialmente non serve salvare la session_id, basterebbe per esempio:
$_SESSION['valid'] = 1;
e poi:
session_start();
if ($_SESSION['valid'] != 1)
    session_destroy();
    exit();
}
ma ormai sono abituato così :-)
Ciao,
Luca

 Luca
Ciao,
Daniel


allora, se i campi utente e password hanno rispettivamente quei nomi,  puoi
salvare i valori con:
INSERT INTO tabella (utente, password) VALUES ('$user', ENRYPT('$pwd'));
e verificare l'utente con
SELECT * FROM tabella WHERE utente = '$user' AND ENCRYPT('$pwd', password) =
password;
se non dą risultati significa che o non esiste l'utente o la password č
errata
Ciao,
Luca
PS: avevo detto una cacchiata:
č
crypt($pwd, $pwd_crypted)==$pwd_crypted
e NON
crypt($pwd_crypted, $pwd)==$pwd

 crypt($pwd_crypted, $pwd)==$pwd
Ok allora ho fatto così:
- index1.php è il form per inserimento password
- aut.php controlla la password e imposta la sessione
        ...
        $pass_crypt=crypt($password);
        if(crypt($pwd,$pass_crypt)==$pass_crypt)
                {
                echo("Esatto");
                }
                else
                {
                echo("Sbagliato");
                session_destroy();
                exit();
                }
        session_start();
        $_SESSION['sessionid'] = session_id();
   ?>
- admin.php è una pagina protetta quindi comincio con 
 
        <?php
        session_start();
        if ($_SESSION['sessionid'] != session_id())
        {
        session_destroy();
        exit();
        }
        ?>
Quindi se tentassi di accedere direttamente ad admin.php non dovrei
riuscirci, invece è come se non controllasse la sessionid. Sicuramente ho
sbagliato qualcosa...sai dirmi dove?
Ciao

 sbagliato qualcosa...sai dirmi dove?
Ho provato dopo un po' e funzionava in modo corretto, ovvero tentando di
vedere direttamente admin.php mi esce la pagina bianca. Ho fatto provare
pure ad un mio amico dal suo pc e mi ha detto che non riesce a vedere la
pagina.
Questo mi fa pensare che quindi avevo la sessione aperta solo sul mio pc. Ho
fatto uno script per il logout:
<?php
session_destroy();
exit();
?>
Devo metterci ancora qualcosa? Tipo un unregister()?
Grazie
Ciao

 ?>
Tutto risolto, si deve mettere pure session_start() altrimenti non sa dove
vedere ciň che deve eliminare. Ora funzione tutto bene. Devo dare una
ripulita al codice e sistemare delle finezze, ma il sistema č giŕ
utilizzabile. 
Grazie di tutto.
Ciao
Daniel