Newsgroup: it.comp.www.php
Titolo: Aiuto sulle sessioni.

Salve a tutti! il mio problema è il seguente:
ho 3 pagine:
-una (A) che contiene il form per l'autenticazione dell'utente;
-una (B) che autentica l'utente e mostra una lista di articoli con un
collegamento alla pagina (C) per ogni articolo;
-una (C) che mi mostra il dettaglio dell'articolo
supponendo che un utente NON autenticato conosca l'indirizzo delle tre
pagine, come faccio a fare in modo che questi non si possa collegare
direttamente alla pagina B o C?
lo so che mi sto perdendo in un bicchier d'acqua, ma sto iniziando solo ora
a fare autenticazione di utenti....
DarKStaR


Personalmente faccio così (so già che in mille si leveranno per dirmi che
sbaglio :-):
- in fase di login, se l'autenticazione dell'utente è valida, registro l'id
della sessione aperta in una variabile di sessione:
    session_start();
    $_SESSION['sess_id'] = session_id();
- nelle pagine protette, prima di qualiasi altra cosa, verifico che tale
variabile sia uguale all'id della sessione corrente:
session_start();
if (!isset($_SESSION['sess_id']) || $_SESSION['sess_id'] != session_id()){
    session_destroy();
    header("Location: 
http://path/intero/login.php
");
    exit();
}
Probabilmente, usando register_globals = off, basta salvare una variabile
qualsiasi dopo il login:
    session_start();
   $_SESSION['valid_session'] = 1;
e verificarla nelle pagine protette:
session_start();
if (!isset($_SESSION['valid_session'])){
    session_destroy();
    header("Location: 
http://path/intero/login.php
");
    exit();
}
Comunque il primo metodo funziona sempre.
Ciao,
Nico


allora, a me funziona solo il secondo caso, ma devo chiederti una cosa nico,
tu scrivi qui sopra, assegno alla variabile di sessione "session_id()", che
sicuramente è una variabile che ti sei creato nella prima pagina, nelle
altre pagine poi bisogna scrivere l'altro pezzo di codice... sulla prima
parte del IF nulla da dire, ma quando scrivi "!=session_id()" cosa intendi,
da dove rispunta, che controllo fai... ti confesso che non l'ho capito
questo IF, ed infatti non mi funziona........ ma ho apprezzato il secondo
suggerimento...
grazie
...blu...



L'idea è questa:
La funzione session_start() crea una sessione e le assegna un numero se tale
sessione non esiste, altrimenti consente l'uso della sessione in corso. Se
l'utente accede dalla pagina di login standard, e tu salvi il numero di
sessione nella sessione stessa, alla pagina successiva, essendo la sessione
aperta regolarmente, il numero salvato ed il numero di sessione corrente
coincideranno.
Se invece l'utente furbetto prova ad accedere ad una pagina protetta,
session_start() creerà un nuovo numero di sessione, che sicuramente non
coinciderà con alcuna variabile memorizzata.
Ciò è ovviamente fattibile anche con una variabile qualsiasi che non
contenga l'id di sessione (secondo metodo con register_global= off), ma il
primo a me personalmente da maggiore sicurezza, perchè oltre al fatto che
una variabile sia settata, viene anche verificato il suo valore.
Ricordiamoci che i bug sono sempre dietro l'angolo :-)
Spero di essere stato chiaro, altrimenti fammi sapere.
Ciao,
Nico

 }
"isset" determina se una variabile è settata o meno, quindi nel tuo script
che centra? forse mi sfugge qualcosa? e non capisco.....
comunque ho risolto finalmente quasi tutti i miei problemi con le sessioni e
le autenticazioni delle sessioni......... rimane qualche problemino, ma ti
faro sapere...
...blu...