Newsgroup: it.comp.www.php
Titolo: Problema con frame

 
                  Ciao, ho creato la pagina index.php con 2 frames. In uno dei frames, quello
di sinistra carico un menu e la form per il login. A login effettuato carica
un menu diverso (mettiamo menu1.htm) nel frame di sinistra pio, da qui,
navigo nel sito. Il problema è che quando faccio un refresh (F5 o
dall'apposito tasto sulla barra degli strumenti) mi aggiorna tutti i frames
(e questo è giusto) ma mi riporta il menu dell'utente non loggato invece di
mantenere quello dell'utente loggato. Dalla pagina di della log in mando
l'utente alla pagina connect dove avviene la registrazione della sessione (e
sue variabili) per cui, previo controllo su db di user e pw, viene caricato
il menu dell'utente loggato. Presumo di dover mettere un controllo che dice
se $AUTENTICATO (utente loggato e variabilie di sessione registrata) è ugule
a "true" carica menu 1 anzichè menu0. Questo penso vada fatto nella pagina
index.php ma non so come passare la variabile di sessione $AUTENTICATO. In
ogni pagina dell'area protetta (per utenti loggati) inserisco una pagina
autenticazione.php che controlla se la variabile è avviata, scaduta o ancora
valida. Io ho provato a inserire questa pagina in index.php ma non funge
perchè facendo il refresh non passa la variabile.
Sapete aiutarmi?
Ciao,
Michele
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio
news:82Z84Z189Z225Y1...@usenet.libero.it...

Allora, se il flag di autenticazione lo vuoi mettere in sessione
($_SESSION["log_state"] = 1||0) allora non hai sicuramente bisogno di
passarlo in ogni pagina, in quanto sarà presente in tutte le pagine e sarà
richiamabile semplicemente conn $_SESSION["log_state"].
Ovviamente effettua un controllo che il valore log_state esista, altrimenti
nel caso di login non ancora effettuato ti genererà un worning o notice (non
ricordo mai quale tra i due).
Per effettuare il controllo di validità di log_state, puoi tranquillamente
fare come stai facendo tu, ossia inserire una funzione di check in una
pagina che poi includerai nelle pagine che ti interessano ai fini
dell'autenticazione.
Se ti sembra che la variabile scompaia, allora prova a fartela scrivere
nella pagina del menù, così almeno sei sicuro che la perdi all'atto del
refresh e non magari prima perchè settata male.
Ciaoo

 refresh e non magari prima perchè settata male.
La variabile esiste ed è ben registrata. Purtroppo quando faccio il refresh
perdo il contenuto della variabile (o meglio non so). Però sono sicuro che
quando index.php si ricarica dopo il refresh, ricarica (da codice) il frame
con il menu relativo all'utente che deve ancora loggarsi. Io non so che tipo
di codice inserire in index.php per far si che se l'utente non è loggato
carichi (include) menu1.htm altrimenti carichi (include) menu2.htm. Perchè
con il refresh la variabile di sessione $AUTENTICATO non passa pur essendo
ancora valida la sessione.


 ha scritto nel messaggio
news:82Z84Z189Z225Y1...@usenet.libero.it...

Allora, tu dici che la sessione risulta ancora valida, quindi riesci a farti
stampare il session id e anche le altre variabili si sessione ad eccezzione
dell'unico valore $Autenticate.Che poi scusa, perchè indichi la variabile di
sessione come $AUTENTICATO e non come $_SESSION["AUTENTICATO"]????
Scusa se faccio domande a cui magari hai già pensato o che hai già risolto,
ma stò cercando di capire il perchè della perdita di quel valore, sai molti
nel newsgroup non accedevano a valori passati da altre pagine perchè per
esempio usavano $variabile anziche $_POST["variabile"].

 esempio usavano $variabile anziche $_POST["variabile"].
Allora:
dal form di login vengo mandato a una pagina che si connette al db,
controlla la validità dei dati e quindi mi passa alla registrazione della
sessione. Qui registro le variabili tra cui
$AUTENTICATO=="true";
Ovviamente se il log è sbagliato è != da true percui mi rimanda al form.
Altrimenti mi manda alla pagina che dico io, ipotesi la famosa pippo.php.
Poi ho creato un file (autenticazione.php) nel quale controllo che le
variabili siano registrate; in tal caso aggiorno il tempo di sessione. Se
uno tra $AUTENTICATO è falso o l'ip è diverso dall'ip di sessione(registrato
nella sessione) o now>del time sess distruggo la sessione. Questo file lo
inserisco in tutte le pagine che voglio proteggere quindi le variabili le
prendo come $pippo ecc.
Se vuoi posto il codice.



E difatti il ragionamento non fa una grinza, ma con $AUTENTICATO=="true";
non stai settando una variabile di sessione, stai solo dichiarando una
variabile all'interno della pagina, il cui ambito di visibilità resta
confinato all'esecuzione dello script. Per registrare una variabile in
sessione devi fare $_SESSION["autenticato"] = "true" e per richiamarla per
un controllo devi fare:
if ((array_key_exists("autenticato",$_SESSION)) && ($_SESSION["autenticato"]
== "true")) {
    L'utente è in sessione
}


Scusa, potresti postare il codice, così lo provo e cerco di capire che
problema ci possa essere.

 }
Hai ragione ma da autodidatta spesso chiamo le cose in modo sbagliato.
Capito quello che mi hai scritto ma:
1. $_SESSION["autenticato"] = "true" lo faccio al momento di session start?
Io registravo le variabili semplicemente con session_register........;
2. Quindi mi stai dicendo che in questo modo posso controllare che la
sessione sia valida richiamando $SESSION["autenticato"] anche in pagine in
cui non incluso autentication.php? Cioè la variabile è true finchè la
sessione è valida! Sarebbe fantastico!!! Così con quell'if gli dico di
caricare una pagina piuttosto che un'altra.
3. Mi pongo una domanda, ma se l'utente chiude il browser senza fare il
logout come si comporta la variabile? (forse so anche la risposta ma per
sicurezza chiedo).
Grazie,


 ha scritto nel messaggio
news:82Z84Z189Z225Y1...@usenet.libero.it...

Allora, nel tuo caso specifico sarebbe:
1)
La prima istruzione della pagina init dovrebbe essere session_start().
2)
Nella pagina dove fai il controllo con il db, registri le variabili di
sessione in questo modo per esempio:
$query = "Select * from login where user = '" . $_POST["user"] . "' and
password = '" . md5($_POST["password"]) . "'";
a questo punto esegui la query, e se ottieni risultati positivi allora setti
le variabili:
$_SESSION["utente"] = $_POST["user"]  //ti consiglio di memorizzare l'utente
così se devi usarlo durante le pagine puoi recuperarlo facilmente
$_SESSION["autenticate"] = "true"
In questo modo hai settato le due variabili nella sessione. Da adesso,
ovviamente finchè nons cade la sessione, in ogni pagina in cui inserirai
come prima stringa session_start() potrai accedere a queste variabili.
3)
Se l'utente chiude il browser senza fare il logout la sessione cade e viene
persa (in linea di principio) ovviamente se tu memorizzi un cookie, puoi
riutilizzarlo finchè presentre nel pc client.
Ti conviene crearti una funzione apposita per il controllo della regolarità
della sessione, oppure puoi efftettuare il controllo in ogni pagina.
Spero di essermi spiegato abbastanza comprensibilmente. Nel caso abbia
ancora problemi continua la discussione

 ancora problemi continua la discussione
Volevo dire che io le variabili di sessione le registro con
session_register("AUTENTICATO"); Non č giusto? Senza $_SESSION.....
Funziona, ho semplicemente aggiunto session_start(); all'inizio della pagina
dove voglio richiamare la variabile di sessione $AUTENTICATO (la stampo a
viseo semplicemente con echo "$AUTENTICATO";)come mi hai detto tu. Funziona.
La prova che ho fatto adesso invece č questa. Sono andato da
localhost/......... a ad es. 
www.google.it
 e poi sono tornato, digitando
l'indirizzo, su localhost.....la sessione č ancora aperta e mi ricarica il
solito menů; questo non deve accadere, come lascio il sito la sessione deve
non essere piů valida!!!! Come ovvio al problema?



http://www.php.net/manual/it/ref.session.php
XCIX. Funzioni di gestione della sessione
L'uso di $_SESSION (o $HTTP_SESSION_VARS con PHP 4.0.6 o precedente) è
raccomandato per sicurezza e leegibilità del codice.Con $_SESSION o
$HTTP_SESSION_VARS, non c'è bisogno di usare le funzioni
session_register()/session_unregister()/session_is_registered(). Gli utenti
possono accedere alla variabile di sessione come a una variabile normale.
Sul fatto che tornando caricando 
google.it
 e poi tornando indietro ti
ricarica la pagina con la sessione ancora attiva, non so se si possa fare
qualcosa, presumo che sia normale.
Spero che qualcun'altro possa darci informazioni a riguardo, ma ti ripeto,
per sua natura la sessione viene mantenuta dal browser, quindi finchè il
browser è aperto (la setssa istanza) presumo che i dati vengano mantenuti
vivi.
Ho provato a controllare anche altri siti, lo fa il sito delle poste, il
sito della banca, i forum e penso tutti coloro che utilizzano le sessioni
(quasi tutto il web).


Ho trovato un metodo (bruttissimo secondo me), allora puoi trovare tramite
javascript il momento in cui l'utente esca dalle tue pagine e in quel caso
caricare una pagina che faccia un session_destroy.
Il codice è:
<body onUnload="javascript:carica();">
nella funzione javascript ti inserisci la chiamata ad una pagina che non
farà altro che chiamare session destroy.
Come ho già detto non è un modo pulito e neanche sicuro perchè ovviamente
javascript è lato client e potrebbe essere disattivato, va però detto che il
90% degli utenti ha javascript attivo poichè è troppo usato nel web e nel
caso non fosse attivo da qualche utente, sarebbe comunque una minoranza ad
incorrere nel problema di avere la pagina ricaricata con i dati.
Oltre questo non mi è venuto nessun metodo.
Ciaooo

Ma se usassi il referer per capire che proviene da un sito diverso dal mio e
in tal caso distruggessi la sessione e rimandassi l'utente al login, si può
fare?


 al login, si pur fare?
Totalmente insicuro.
-- 
I am what I am, I do what I can
L'uomo, conscio di sbagliare, persevera.

 fare?
ha senso ?
se il processo del broswer de''utente e' loggato basta arire google per
errore e ritrovarsi
fuori


Volevo ringraziare tutti quelli che hanno partecipato a questo thread, ho
imparato un sacco di cose nuove. Alla prossima,
