Newsgroup: it.comp.www.php
Titolo: login area riservata e sessioni

Stavo cercando di preparare una sezione del sito riservata, ovvero
accessibile solo con login, in cui ogni utente può modificare i propri dati.
A sto proposito, penso che l'uso delle sessioni sia indispensabile.
Ora, non so bene come comportarmi, nel senso che:
nella home del sito metto un piccolo form con due campi, userID e pass e
qui, ovviemente uno mette i dati e clicca su login.
D'altro canto però il session.start va messo prima di ogni output su
browser.
Quindi cosa devo fare: faccio un session.start nella home e se questo mi
mette i dati nei campi di login registro le variabili nella sessione e poi
la faccio proseguire nelle altre pagine riservate passando il SID? oppure
nella home lascio il form senza session.start e l'inizio della sessione lo
metto invece nella pagina a cui si accede premendo il tasto login (quindi
passo semplicemente i parametri tramite post alla pagina pagina2.php in cui
come prima riga ho un session.start e qui eventualmente metto le variabili
come variabili di sessione).
E se i dati di login non sono corretti, come faccio visto che la
session.start sta in testa al file? Mi è sufficiente fare un session.destroy
e richiedere il login?
Scusate la lunghezza del post
-- 
doGmaI

 sufficiente fare un session.destroy e richiedere il login?
IMHO hai una idea piuttosto confusa di come funzionino le sessione ed
il protocollo HTTP in generale.
La sessione puoi aprirla in qualsiasi pagina, il fatto di averla aperta
non significa che l'utente sia loggato o meno.
-- 
I am what I am, I do what I can
Do. Or do not. There is not try.

 Scusate la lunghezza del post
in ogni pagina riservata fai un
include ("auth.php");
in auth.php ci metti il form per l'autenticazione, che viene mostrato 
solo se non è registrata la sessione con la coppia utente/pass.
Se mostri il form, alla fine di quest'ultimo, metti un "exit;"
una cosa approssimata e scritta su 2 piedi:
auth.php
<?
  session_start();
  $logged=false;
  if ( isset($_POST['login']) && isset($_POST['pass']) )
   {
    $_SESSION['login']=$_POST['login'];
    $_SESSION['pass']=$_POST['pass'];
    // qui metti ulteriori controlli per verificare che
    // i valori passati non contengano codice SQL o HTML
    // o caratteri 'dannosi'
   }
  if ( isset($_SESSION['login']) && isset($_SESSION['pass']) )
   {
    $query="select * from utenti where login=".$_SESSION['login'];
    $query.=" and pass=".$_SESSION['pass'];
    $result=mysql_query($query);
    if (mysql_num_rows($result)==1) $logged=true;
   }
  if (!$logged)
   {
?>
<form action="<?=$_SERVER['PHP_SELF']?>" method="POST">
  login:<input type="text" name="login">
  passw:<input typr="text" name="pass">
        <input type="submit">
</form>
<?
    exit; //importante per bloccare l'accesso se !$logged
   }
?>
includi auth.php all'inizio di ogni pagina riservata.
Dovrebbe funzionare ma non l'ho provata.
ciao
Alesi_27

 Dovrebbe funzionare ma non l'ho provata.
[..]
funzionare dovrebbe funzionare..
ma nome utente e password in chiaro sia nel db che nella sessione non e'
cosa buona.. (sicurezza sotto i piedi.. e non sono nemmeno i tuoi)
-- 
www.iuz-lab.info

 
ovvio, si potrebbe fare md5, dipende cmq da dove deve essere utilizzata 
l'applicazione
ciao
Alesi_27

Il Sun, 22 May 2005 01:56:59 GMT, alesi_27 scrisse:

 Come sicurezza mi sa che basta una qualche trasformazione anche banale
delle stringhe, visto che alla fine l'unica modifica che può fare un utente
è cambiare la propria citazione, l'indirizzo del proprio sito web o la
provincia di provenienza.
Cmq mi pare di aver visto che in php c'è una funzione CRC se non sbaglio.
Forse è sufficiente usare quella?
-- 
doGmaI