PDA

Visualizza versione completa : [PHP] mal funzionamento sessioni


knightOfDoom
04-09-2006, 09.09.53
Buon giorno a tutti quanti voi..

Ho un piccolo problema con le sessioni. :wall:

- Uso le sessioni per trasmettere info da una pagina all'altra
- Ho una pagina di login dove inserisco nome utente e password
- Tramite questa pagina il browser mi ridireziona ad una pagina per l'utente oppure ad una pagina per administrator e mi setta la sessione ($_session["utente"] = nome_utn inserito)

Detto questo:

Quando mi posiziono nella pagina di login ed inserisco i dati (nome utente e password) e poi premo il bottone logga, tutto sembra funzionare bene.

Ma quando mi trovo o nella pagina di root oppure in quella di utente mi accorgo che la sessione non ha riportato i dati prima inseriti.

Quindi io premo il bottone logout che mi riporta alla login.php, qui rifaccio tutto il processo e questa volta tutto funziona davvero, ossia la session trasmette i dati da me impostati da una pagina all'altra..

Qua sotto il codice della log.php ossia, la pagina che analizza i dati inseriti, quarda se nel db esiste l'utente, setta la session, e ridireziona il broswer nella pagina che volevo:

------------------------------------------------------------------------------------
<html>
<head>
<title>Login</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<link rel="stylesheet" type="text/css" href="my_css.css">

</head>

<body>
<table width="60%" border="0" align="center">
<tr>
<td><div align="center"><img src="/gestore/immagini/banner.jpg" width="100%"></div></td>
</tr>
</table>

<p>&nbsp;</p>


<?php
include("dbconfig.php");

//ricavo i valori della form precedente
$nome = $_POST["nick"];
$password = $_POST["psw"];


$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connesione");

mysql_select_db("gestore", $db)
or die ("Errore nella selezione del database");


//creo la query
$sql = "SELECT * FROM Tbl_Utente WHERE nick='$nome' and password='$password'";
//invio tale query al db
$result = mysql_query ($sql, $db);
//ricavo i dati dal db
$row = mysql_fetch_array ($result);
//numero di riche contenente i dati
$num = mysql_num_rows($result);

if ($num == 0) { //cioè non c'è nessun dato all'interno del db
//utente no trovato
echo "
<table width='60%' border='0' align='center'>
<tr>
<td><div align='center'><h2 class='title'>Modulo di Direzione</h2></div></td>
</tr>
</table>

<br>
<br>

<table width='60%' border='1' align='center'>
<tr>
<td colspan='3'><div align='center'><br>Il nome non è presente nel database
oppure hai sbagliato la password.<br>
Cosa vuoi vare?<br><br>
</td>
</table>
<br>
<br>
<table width='40%' border='0' align='center'>
<tr>
<td><div align='center'><a href='registra.php?n=$nome&p=$password'><b>Registra
Utente</b></a></div></td>
<td><div align='center'><a href='login.php'><b>Ritorna al Login</b></a></div></td>
<td><div align='center'><a href='index.php'><b>HomePage</b></a></div></td>
</tr>
</table>
";
}
else
{//utente esistente
if ($row["diritto"] == 0)
{//utente semplice
mysql_close ($db);
//provo con la session
$_SESSION["utente"] = $nome;
header("Location: http://192.168.100.140/gestore/usr_page.php"); // Ridireziona il browser per INTERNET
//header("Location: http://localhost/Gestore/usr_page.php"); // Ridireziona il browser per RETE LOCALE
exit;
}
else
{//utente roo
mysql_close ($db);
//provo con la session
$_SESSION["utente"] = $nome;
header("Location: http://192.168.100.140/gestore/root_page.php"); // Ridireziona il browser PER INTERNET
//header("Location: http://localhost/Gestore/root_page.php"); // Ridireziona il browser per RETE LOCALE
exit;
}
}
?>
<p>&nbsp;</p>
<p>&nbsp;</p>

<table width="60%" border="0" align="center">
<tr>
<td><div align="center"><img src="/gestore/immagini/downpage.jpg" width="100%"></div></td>
</tr>
</table>

</body>
</html>
------------------------------------------------------------------------------------

Grazie mille per l'aiuto e per il tempo che mi date..

Alessandro

Gergio
04-09-2006, 10.11.41
credo che ti manchi un bel
session_start();
prima di iniziare a dichiarare le variabili della sessione (devi metterlo anche nelle altre pagine in cui vorrai recuperare le variabili)
Altra cosa
vedo che passi direttamente al db qllo che ti arriva dall'utente: attento all'sql injection

knightOfDoom
04-09-2006, 10.21.15
Ma io ho impostato il php.ini in modo che le session partano in automatico..

e i dati che invio al db, li controllo in modo dettagliato nella pagina login.php tramite funzioni javascript..

grazie per l'aiuto..

Gergio
04-09-2006, 11.35.29
nn saprei: ho avuto solo un'occasione di usare le sessioni con php e con session_start non ho avuto problemi

e se invece di metterci i controlli javascript metti nel tuo db direttamente il risultato di uno sha1(nomeutente/password) e controlli qllo? Cosi' l'utente puo' scegliere liberamente username e password e tu sei tranqllo (a me, per esempio, l'idea di avere nella mia password solo l'underscore come carattere speciale, non piace... ;))

knightOfDoom
06-09-2006, 08.46.02
Ho provato entrambi i metodi (ho usato l'auto start ed anche all'inizio di ogni singola pagina session_start())

ma non ottengo risultati..

la prima volta che loggo non funziona, poi faccio logout e rientro e allora le sessioni partono..

Qualcuno sa spiegarmi il perchè..

grazie anticipatamente per l'aiuto