PDA

View Full Version : [php e mysql] ancora sul login


lucas72
11-06-2004, 19:34
Ciao ragazzi
devo ancora risolvere un problema in merito alla protezione
di pagine web di differenti utenti:
Ho trovato questi script:
il codice del form per il login:


<html><head>
<title>Shatners PHP Login</title>
</head>
<body>
<form action="checkuser.php" method="post" name="form1">
<table width="50%" border="0" align="center" cellpadding="4" cellspacing="0">
<tr>
<td width="22%">Username</td>
<td width="78%"><input name="username" type="text" id="username"></td>
</tr>
<tr>
<td>Password</td>
<td><input name="password" type="password" id="password"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="submit" name="Submit" value="Submit"></td>
</tr>
</table></form></body>
</html>


checkuser.php (x il controllo dati):

<?
/* Check User Script */
session_start(); // Start Session
include 'db.php';
// Convert to simple variables
$username = $_POST['username'];
$password = $_POST['password'];

if((!$username) || (!$password)){
echo "Please enter ALL of the information! <br />";
include 'index.htm';
exit();
}
// Convert password to md5 hash
$password = md5($password);

// check if the user info validates the db
$sql = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password' AND activated='1'");
$login_check = mysql_num_rows($sql);

if($login_check > 0){
while($row = mysql_fetch_array($sql)){
foreach( $row AS $key => $val ){
$$key = stripslashes( $val );
}
// Register some session variables!
session_register('first_name');
$_SESSION['first_name'] = $first_name;
session_register('last_name');
$_SESSION['last_name'] = $last_name;
session_register('email_address');
$_SESSION['email_address'] = $email_address;

header("Location: $username.php");
}
} else {
echo "You could not be logged in! Either the username and password do not match or you have not validated your membership!<br />
Please try again!<br />";
include 'index.htm';
}
?>


e una pagina qualsiasi (in questo caso luca.php, ma ci deve essere una per ogni utente) protetta così:


<?
session_start();
if ( empty( $first_name ) ) {
?> Welcome Guest, You Can Login <a href="index.htm">Here</a>
</a>
<?
} else { include 'db.php'; echo "Come stai?,
". $_SESSION['first_name'] ."";
?>
<a href="logout.php">Logout</a>
<? } ?>


Ci sono ovviamente altre pagine, ma queste 3 sono le più importanti.

Nella seconda pagina, come potete vedere, si effettua il controllo
del user e della pass poi io ho aggiunto

header("Location: $username.php");

che reindirizza, come voglio, alla pagina protetta del singolo utente.
Il problema è che una volta che l'utente si è autenticato
e aperta la sessione accede si alla propria pagina web, ma può
entrare anche nelle pagine altrui (digitando nell'indirizzo del browser
invece che luca.php ad esempio ciccio.php)

Ho aggiunto nel file checkuser.php questo

...
session_register('password');
$_SESSION['password'] = $decrypted_password;

e ho fatto questa modifica al file dell'utente:

<?
session_start();
include 'db.php';
if($_SESSION['password']=="98jaatc9")//faccio il confronto con la password del cliente autorizzato
{ echo "Welcome,
". $_SESSION['first_name'] ."";
?>
<a href="logout.php">Logout</a>
<? }

else
echo "Ingresso non autorizzato";
?>

Sembra funzionare ma ci sono 2 problemi:
1) Ho notato che devo fare il login 2 volte in quanto la prima volta anche
se la pass è giusta mi riporta "Ingresso non autorizzato"

2) E' efficace, ma non so (considerando la mia conoscenza del php)
quanto sicuro. Le sessione non le conosco affatto.

Potete dirmi qualcosa su questi 2 punti?
grazie

lucas72
12-06-2004, 13:11
up

cionci
12-06-2004, 20:13
Ma perchè fai una pagina diversa per ogni utente ?!?!?
Comunque non devi richiamare session_register ogni volta... Basta l'assegnazione al vettore $_SESSION...

lucas72
13-06-2004, 12:22
semplicemente perchè voglio inserire il form del login
in una pagina (diciamo la home page) e da qui
un ipotetico utente/cliente possa accedere ad una propria pagina che contenga dati personali che può visualizzare solo ed esclusivamente lui
(oltre all'amministratore del sito, si intende)

Cosa modifico allora del codice sopra?
grazie

cionci
13-06-2004, 12:29
Non importa !!! Anzi...è davvero brutto ;)
Puoi fare una pagina unica chimata ad esempio dati_utente.php...
Salvi nella sessione il nome utente ed in base a quel valore personalizzi la pagina ;)

lucas72
13-06-2004, 17:35
:what: :what: :what: :what: :what:

sospettavo che avresti proposto una soluzione del genere
il fatto è che conosco il php meno del c++
ho provato già a fare una cosa del genere senza successo (da ridere)

Lo script sopra era già pronto io ho solo apportato delle modifiche:p :p :p

potresti farmi un esempio per piacere.
grazie ancora