Newsgroup: it.comp.www.php
Titolo: Problema sessione php

Ciao a tutti, ho un problema....sto creando un sito, quando mi registro
è tutto ok, infatti mi appare il menù e tutto il resto. La verifica
di nome e password viene fatta in un file index.php(contenente anche la
grafica). Le voci del menù richiamano il file index.php e quando le
seleziono mi appaiono correttamente, ma quando presempio effettuo delle
modifiche e poi invio i dati mi disconnette dalla sessione,
scrivendomi: "LOGOUT=LOGOUT"
Qualcuno può aiutarmi?????
Grazie.

 ha scritto nel messaggio 
news:1155390344....@p79g2000cwp.googlegroups.com...

Sarebbe meglio avere la possibilità di leggere il codice
Saluti 

Ciao, ho fatto una prova e non includendo il file index.php funziona
tutto....
secondo me il problema è in index.php:
<?
//Nel caso di login viene compilato il modulo e settato il valore
$LOGIN
if (isset($LOGIN))
	{
		//Facciamo la query cercando una riga contenente i valori immessi
		$query="select * from $tabella where username='$User' and
password=password('$Pass')";
		$risultato = mysql_query($query) or die(mysql_error());
		//Se il risutato sarà andato a buon fine otterremo almeno una riga
risultato
		if (mysql_numrows($risultato)>0)
			{
		  		//In tal caso l'utente viene logato
		  		$riga = mysql_fetch_array($risultato);
		  		$Utente=$User;		//Se ne memorizzano nelle variabili di sessione
l'username
		  		$Diritti=$riga['type'];	//ed i diritti (0 utente normale, 1
amministratore)
			}
		//In caso contrario si ripresenta il modulo per il login!!!!
	}
echo "";
if (isset($Utente) and !isset($LOGOUT))
	{
		//Se un utente è stato logato si stampano le azioni (con i
rispettivi link) che gli sono consentite
		echo "<p>User: $Utente</p>";
		stampaDir("$Diritti");
	        if($Diritti==0)
	            {
	            $query2="select credito from user u, scheda s  where
(username='$Utente') and (u.id_user=s.id_user)";
	            $risultato2 = mysql_query($query2) or die(mysql_error());
		    $riga2=mysql_fetch_array($risultato2, MYSQL_ASSOC);
		    echo "<p>".$riga2['credito']." €\n a disposizione</p>";
	            }
	}
if (isset($LOGOUT))
	{
		unset($Diritti);
		unset($Utente);
		session_unregister('Diritti');
		session_unregister('Utente');
	}
?>

----------------------------------------------------------------------------
<?
/***
Per le sessioni utilizzare $_SESSION['nomesessione']
e non $nomesessioneglobale
register_globals deve essere possibilmente su off
dichiarare le variabili ed assegnare un valore(da controllare) che permette 
di evitare per quanto possibile
problemi se register_globals è on e vengono passati dati dall'esterno.
per es.:
$Diritti = -1;
***/
//Nel caso di login viene compilato il modulo e settato il valore
$LOGIN
if (isset($LOGIN))
{
//Facciamo la query cercando una riga contenente i valori immessi
$query="select * from $tabella where username='$User' and
password=password('$Pass')";
/***
Per LE query utilizzare sempre la funzione mysql-real-escape-string() per 
tutte le variabili passate da utente
http://it.php.net/manual/it/function.mysql-real-escape-string.php
nel caso sia abilitato magic_quotes_gpc usare prima stripslashes 
http://www.php.net/manual/en/function.stripslashes.php
o disabilitare magic_quotes_gpc (si migliorano le prestazioni ma si hanno 
più problemi in caso di script php fatti male)
In questo caso non so se vengono controllate prima le stringhe o meno .. 
male che vada può servire ad altri.
***/
$risultato = mysql_query($query) or die(mysql_error());
//Se il risutato sarà andato a buon fine otterremo almeno una riga
risultato
/***
Consigliabile ma non indispensabile utilizzare
if (mysql_numrows($risultato) === 1)
per evitare l'accesso nel caso in cui ci siano record duplicati
non dovrebbe capitare ma in ogni caso si stringe il risultato ad uno e non a 
numero maggiore di 0.
***/
if (mysql_numrows($risultato)>0)
{
  //In tal caso l'utente viene logato
  $riga = mysql_fetch_array($risultato);
  $Utente=$User; //Se ne memorizzano nelle variabili di sessione
l'username
  $Diritti=$riga['type']; //ed i diritti (0 utente normale, 1
amministratore)
}
//In caso contrario si ripresenta il modulo per il login!!!!
}
echo "";
if (isset($Utente) and !isset($LOGOUT))
{
//Se un utente è stato logato si stampano le azioni (con i
rispettivi link) che gli sono consentite
echo "<p>User: $Utente</p>";
stampaDir("$Diritti");
        if($Diritti==0)
            {
            $query2="select credito from user u, scheda s  where
(username='$Utente') and (u.id_user=s.id_user)";
            $risultato2 = mysql_query($query2) or die(mysql_error());
    $riga2=mysql_fetch_array($risultato2, MYSQL_ASSOC);
    echo "<p>".$riga2['credito']." ?\n a disposizione</p>";
            }
}
/*** Il controllo per il logout è preferibile metterlo all'inizio e fare un 
eventuale redirect e/o exit()*/
if (isset($LOGOUT))
{
unset($Diritti);
unset($Utente);
session_unregister('Diritti');
session_unregister('Utente');
/***
basta utilizzare solo unset per rimuovere le sessioni se con 
$_SESSION['nomesessione']
evitare variabili globali se possibile.
***/
}
?>
Non so in quale parte dovrebbero essere settate le sessioni ma molto 
probabile che ciò non avvenga e l'utente è loggato solo nel momento in cui 
inserisce user e password subito dopo non può fare altre operazioni, almeno 
questo riesco a comprendere dal parziale script che sarebbe da rifare con 
molta più attenzione(senza offesa, è solo il mio punto di vista che vuole 
essere propositivo per migliorare).
Saluti.
Leonardo Armando Iarrusso 

 ha scritto nel messaggio
news:1155392723.0...@p79g2000cwp.googlegroups.com...
Ciao, ho fatto una prova e non includendo il file index.php funziona
tutto....
secondo me il problema è in index.php:
<?
session_start() ???????
file://Nel caso di login viene compilato il modulo e settato il valore
$LOGIN
if (isset($LOGIN))
{
file://Facciamo la query cercando una riga contenente i valori immessi
$query="select * from $tabella where username='$User' and
password=password('$Pass')";
che ne dici di evitare questo PESSIMO esempio di codice per il login ?
questo esempio e' sbagliato in quanto
2 utenti possono avere la stessa password
il db ti da il primo (che puo essere un admin)
id (int o bigint)
username (unico)
password = md5 (qualcosa.$_POST['password'].quals'altro)
<?
session_start();
select * from utenti where username =  $_POST['user']
if($row[password]=== md5 (qualcosa.$_POST['password'].quals'altro)){
 echo "ciao utente registrato";
 $_SESSION['user'] = OK;
}else{
 echo "forttiti";
$_SESSION['user'] = KO;
}
$risultato = mysql_query($query) or die(mysql_error());
file://Se il risutato sarà andato a buon fine otterremo almeno una riga
risultato
if (mysql_numrows($risultato)>0)
{
  file://In tal caso l'utente viene logato
  $riga = mysql_fetch_array($risultato);
  $Utente=$User; file://Se ne memorizzano nelle variabili di sessione
l'username
  $Diritti=$riga['type']; file://ed i diritti (0 utente normale, 1
amministratore)
}
file://In caso contrario si ripresenta il modulo per il login!!!!
}
echo "";
if (isset($Utente) and !isset($LOGOUT))
{
file://Se un utente è stato logato si stampano le azioni (con i
rispettivi link) che gli sono consentite
echo "<p>User: $Utente</p>";
stampaDir("$Diritti");
        if($Diritti==0)
            {
            $query2="select credito from user u, scheda s  where
(username='$Utente') and (u.id_user=s.id_user)";
            $risultato2 = mysql_query($query2) or die(mysql_error());
    $riga2=mysql_fetch_array($risultato2, MYSQL_ASSOC);
    echo "<p>".$riga2['credito']." ?\n a disposizione</p>";
