Newsgroup: it.comp.www.php
Titolo: form POST + sessioni + BUG netscape 6 ??

ciao,
in breve: 
qualcuno di voi sa o ha mai notato un bug nella gestione dei form con
method post in netscape 6 ma NON nei netscape precedenti ???
con precisione:
1) ho la classica pagina di login come segue (lasciate stare laspetto
grafico che e' di competenza del mio socio :-p ):
//****** PAGINA 1 - LOGIN  file: dlogin.php *************//
session_start();			
	if (!session_is_registered("today")) 
	{
	    	$today = date("D d M Y, h:i:s a");
	   	session_register ("REMOTE_ADDR");
		session_register ("today");   
	}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> login </TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<h1> Login </h1>
<hr>
<FORM METHOD="POST" ACTION="dmain.php">
 Username:<INPUT TYPE="text" NAME="username"> <br>
 Password:<INPUT TYPE="password" NAME="password"><br>
<INPUT TYPE="hidden" NAME="PHPSESSID" VALUE="<? echo(session_id()) >">
<INPUT TYPE="submit" VALUE="Login Now">
<INPUT TYPE="reset" VALUE="Oops!">
</FORM>
<?PHP 
	if ( isset($error_msg) )  
	{
	    echo "<h3>".$error_msg."</h3>";
	}
	else 
	{
	    echo "Specificare username e password.";
	}
?>
</BODY>
</HTML>
nella quale creo una sessione, mi prendo i dati di login, e propago
dati e sessione con il method post perche' non si vedano facilmente
come sarebbe con method get.
N.B. e' il metodo giusto per propagare la sessione con metodo POST ???
2)ho la pagina che fa i controlli sui dati inseriti rispetto al
database e: se sono giusti mostra pagina ok, mentre se sono sbagliati
mostra una pagina che permette di chiudere la sessione e la finestra
oppure di tornare alla prima pagina impostando opportunamente
$error_msg. in ogni caso effettuo un log degli eventi.
e' la seguente:
//********* PAGINA 2 -CHECK  file: dmain.php *************//
<? 
	session_start();
	if ( !isset($username) or !isset($password) ) 
	{
		session_destroy();
		header ("Location: dlogin.php");
		exit();
	}
 
	//-------------------------------------------
	// SE SI E' TENTATO UN LOGIN CONTROLLO I DATI
	// SUL DB
// qui c'e' una pappardella immensa che cerca dei parametri da un file
di configurazione ed esegue la query fino a che in $id risulti il
codice dell'utente  oppure sia nulla
	$id = $row->ID;
	//-------------------
	// RISULTATO LOGIN
	//
	if (empty($id) )
	{
		//-------------------
		// LOGIN ERRATO
		//
		track ($REMOTE_ADDR, $today, 'failed login' );
		$error_msg = "Verificare username e password.";
	    	session_register ("error_msg");
	  ?>
		<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
		<HTML>
		<HEAD>
		<TITLE> Accesso </TITLE>
		</HEAD>
		<BODY BGCOLOR="#FFFFFF">
		<h1> Login </h1>
		<hr><br>
		<h4>Attenzione! Login errato.</h4><br>
		<FORM METHOD="POST" ACTION="dlogin.php">
		<INPUT TYPE="hidden" NAME="PHPSESSID" VALUE="<?
echo(session_id());?>">
		<INPUT TYPE="submit" VALUE="Riprova">
		</FORM>
		<hr>
		<FORM METHOD="POST" ACTION="logout.php">
		<INPUT TYPE="hidden" NAME="PHPSESSID" VALUE="<?
echo(session_id()); ?>">
		<INPUT TYPE="submit" VALUE="Go Home">		
		</FORM>
		</BODY>
		</HTML>
      <?
		exit();
	}
	else 
	{
		//-------------------
		// LOGIN CORRETTO
		//
		track ($REMOTE_ADDR, $today, "correct login ". $id);
		$db->db_close($db_handle);
		session_register ("id");
      ?>
		<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">		
		<HTML>		
		<HEAD>		
			<TITLE> Accesso </TITLE>
		</HEAD>
		<BODY BGCOLOR="#FFFFFF"> welcome user <? echo ($id)?>
		<FORM METHOD="POST" ACTION="logout.php">
			<INPUT TYPE="hidden" NAME="PHPSESSID"
VALUE="<? echo(session_id()); ?>">
			<INPUT TYPE="submit" VALUE="Go Home">
		</FORM>
		</BODY>
		</HTML>
	  <?
	}	
?>
-------
DUNQUE: ho provato le pagine e funziona perfettamente su internet
explorer dal 4 in poi, su opera 5+, su netscape 4.5x netscape 4.7x con
x = [1|2|3] invece su netscape 6 si presenta la seguente situazione:
- inserisco username e password di un login errato: tutto funziona,
vedo la pagina che mi fa scegliere se chiudere o se ripetere il login
e funzionano e dopo il logout il file della sessione sparisce
- inserisco username e password di un login corretto: NON FUNZIONA,
invece di mostrarmi la pagina welcome non si muove dal form della
prima pagina, come che si rifiutasse di mandare i dati.
 in piu'  ATTENZIONE ATTENZIONE se io apro la Page Source vedo
specificato il session_id corretto ma se per esempio riapro dopo un
istante Page Source nuovamente, ecco che c'e' un nuovo sessio_id, come
che netscape per volonta' sua mi avesse aggiornato la pagina:
riousltato ad ogni click sulla pagina mi si crea una sessione nuova e
comuque il controllo dati non viene eseguito.
CHE NE DITE ???
Roberto Padovani
----------------
ICQ#125729644
----------------

----------------
smanettando sono riuscito (forse!) a circoscrivere il problema, nel
senso che l'unico modo che ho trovato per far si' che funzioni e'
eliminare la riga 
$db->db_close ($db_handle);
dal codice. vabbe' che php chiude le connessioni aperte (non
persistenti) automaticamente alla fine dello script, pero' mi sembrava
giusto che fossi io a chiuderlo.
ad ogni modo qualcuno ha idea del PERCHE' ??
grazie


 controllo dati non viene eseguito.
Credo che si crei sempre una nuova sessione contenente i vecchi dati.
prova a chiudere la sessione se hai un login errato, così verranno
cancellati i dati sbagliati.
Ciao,
nico
-- 
# At least, this is my misunderstanding.

# At least, this is my misunderstanding.
grazie dell'aiuto nico, ma purtroppo cosi' non il problema persiste,
infatti come dicevo ho provato anche senza sessioni.
pare che il problema sia dovuto alla riga $db->db_close($handle) [vedi
codice nel primo post], eliminando quella tutto funziona.
a questo punto la domanda e':
qualcuno sa cosa diavolo fa interbase in fase di chiusura ??? 
in quanto quel db_close() e' solo un metodo di una mia classe wrapper
che nel caso wrappava ibase_close()
sembra quasi che vengano trasmessi degli header che ingannano
netscape6, ma cio' non ha alcun senso..... forse e' qualcosa di molto
piu' triviale..... idee?
grazie a tutti, R.
