PDA

View Full Version : [PHP] Anomalia della sessione


Fabiorayden
07-09-2007, 16:05
Ho alcune pagine dove l'utente può accedervi soltanto tramite login.

La struttura semplificata è questa:

index.php invia alla pag2.php user e password, i quali vengono memorizzati in $_SESSION["user"] e $_SESSION["pwd"]; se passo alla pag3.php non riesco a recuperare i valori delle variabili di sessione solo la prima volta.

A questo punto se accedo alla pag2.php le variabili di sessione non contengono più nulla (vedi codice) e quindi devo rifare il login.
Rifacendo il login tutto funziona.

Il codice è:



pag2.php

<?php
@session_start();

if(isset($_REQUEST["user"]) AND isset($_REQUEST["pass"]))
{
$_SESSION["user"] = $_REQUEST['user'];
$_SESSION["pwd"] = $_REQUEST['pass'];

echo("i valori di sessione sono:<br>");
echo($_SESSION["user"]."<br>".$_SESSION["pwd"]);

echo ("<br><a href='pag3.php'>pagina 3</a>");

}
else
{
$c = r();
echo ("<br>Nome utente o password non validi");
echo ("<br><a href='index.php?r=$c'>riloggati</a>");
session_destroy();
}



pag3.php

@session_start();

if(isset($_SESSION["user"]) AND isset($_SESSION["pwd"]))
{
if(isset($_SESSION["user"]) == "pippo" AND isset($_SESSION["pwd"]) == "pluto")
{
echo ("<br>".$_SESSION["user"]."<br>".$_SESSION["pwd"]);
echo ("<br><a href='pag2.php>indietro</a>");
else
{
echo ("utente non autorizzato");
}
}
else
{
echo ("<br>Sessione non inizializzata");
}

?>



Ovviamente user e password verranno confrontati con quelli presenti in un database e non come ho fatto ora.

MEMon
07-09-2007, 17:50
Questo controllo
if(isset($_SESSION["user"]) == "pippo" AND isset($_SESSION["pwd"]) == "pluto")
non ha senso, isset() è una funziona che ha come valore di ritorno un boolean, e non ha quindi nessun senso confrontarlo con una stringa.

$_REQUEST contiene solo le variabili presenti anche in $_GET e $_POST non in $_SESSION, e (mio consiglio) è meglio se usi $_POST se le variabili le hai passato tramite post o $_GET nel caso le hai passate da url.

In definitva ecco il tuo problema:
Compili un form che ti spedisce le variabili passate con get o post a pag2.php, dove fai un isset($_REQUEST...) che darà esito positivo perchè gli hai appena passato le variabili che ora sono momentanemanete anche in quell'array.
Il controllo passa e setti la sessione.
Vai a pag3.php dove fai un controllo privo di qualunque senso logico, a questo punto ritorni a pag2.php ma stavolta non gli stai passando nulla da get o post, quindi il controllo sull'array $_REQUEST non passa ed ecco che ti sembra che la tua sessione non è stata settata.

Fabiorayden
07-09-2007, 18:16
Concordo sul controllo privo di logica alla pag3.
Non capisco perché non riesco a leggere le variabili di sessione la prima volta che effettuo l'accesso, rifacendo il login funziona tutto (se chiudo e riapro il browser o se digito il nome della pagina non riesco ad accedervi, proprio come voglio io).

MEMon
07-09-2007, 18:18
Ma dal tuo codice, secondo te, dove le vorresti leggere le variabili di sessione?

Fabiorayden
07-09-2007, 18:27
Sia nella pag2 che nella pag3

MEMon
07-09-2007, 18:32
In pag2 non controlli la sessione ma l'array $_REQUEST che è tutt'altra cosa.

prova questo...

session_start();

if(isset($_SESSION["user"])&&isset($_SESSION["pass"])){
echo "Risulti già loggato - Utente: ".$_SESSION["user"];
exit();
}

if(isset($_POST["user"])&&isset($_POST["pass"])){
$_SESSION["user"] = $_REQUEST['user'];
$_SESSION["pwd"] = $_REQUEST['pass'];

echo("Login effetuato con valori:<br>");
echo($_SESSION["user"]."<br>".$_SESSION["pwd"]);
echo ("<br><a href='pag3.php'>pagina 3</a>");
}

Fabiorayden
07-09-2007, 18:52
Tutto come prima.

La pag2 mostra user e password, poi alla pag3 le variabili di sessione non vengono stampate.
Rifacendo il login riesco a visualizzare tutto

MEMon
07-09-2007, 18:54
la pag3 va corretta nn va bene la tua, rifalla e ripostala.
Se usi il mio codice per la pag2 così cm'è deve funzionare.

Fabiorayden
07-09-2007, 19:14
login -> pag2: visualizza user e password prese dalle variabili di sessione
pag2 -> pag3: non ci sono le variabili di sessione
pag3 -> pag2: non visualizza più il contenuto delle variabili di sessione

pag2 (o pag3) -> login -> pag2: visualizza user e password come prima
pag2 -> pag3: visualizza le variabili di sessione
pag3 -> pag2: visualizza le variabili di sessione

Il codice della terza pagina:



@session_start();
include_once("funzioni.php");


if(isset($_SESSION["user"]) AND isset($_SESSION["pwd"]))
{

echo ("<br>".$_SESSION["user"]."<br>".$_SESSION["pwd"]);

$url = "pag2.php";
echo ("<br><a href=\"javascript:window.location.replace('$url');\">pagina2</a>");
echo ("<br><a href='index.php?sess=2'>Disconnetti</a>");

}
else
{
echo ("<br>Manca la sessione in pagina 3");

}



Grazie per la disponibilità che fino ad ora mi hai dato

Fabiorayden
07-09-2007, 19:30
Ora anche il passaggio dalla pag2 alla pag3 funziona, non funziona quello da pag3 a pag2 (come sempre solo la prima volta, dopo funziona tutto)

Edit: su server remoto... in locale non è cambiato nulla.

Fabiorayden
10-09-2007, 09:32
Ora mi sta sorgendo un dubbio...
Non è che il mio problema è dovuto a qualche impostazione errata nel php.ini?

MEMon
10-09-2007, 12:41
Scusa, potresti postare il codice delle 3 pagine che usi? Compreso quella dove ti logghi?

Fabiorayden
10-09-2007, 13:06
Scusa, potresti postare il codice delle 3 pagine che usi? Compreso quella dove ti logghi?

Il problema, a quanto pare, era nella pag2, avevo inserito del codice html prima di session_start (cosa che non avrai dovuto fare...).

Adesso sto controllando che user e password vengano passate correttamente di pagina in pagina

MEMon
10-09-2007, 13:15
Per quello volevo vedere il codice vero e proprio...

Fabiorayden
10-09-2007, 14:11
Ora posso confermare quanto detto prima.
Il problema era il codice html prima di session_start

Grazie MEMon per l'aiuto :mano: