Problemi con autenticazione

eddie

Nuovo Utente
25 Nov 2009
8
0
0
Ciao a tutti. Sono nuovo del forum e...nuovo di php!! Vi chiedo una mano nei miei studi di php e scusate il thread lungo
Sto testando una procedura di autenticazione (esattamente come riportato nel libro) ma la cosa non funzia. Sono ore che ci sbatto la testa...:crying:

La procedura in teoria:

Apro il file "secret.php" , il quale include auth.inc.php
----secret.php
<?php
include 'auth.inc.php';
?>
<html>
<head>
<title>Secret</title>
</head>
<body>
<h1>You've found my password!</h1>
</body>
</html>
-----------------

-----auth.inc.php----
<?php
// start or continue session
session_start();

if (!isset($_SESSION['logged']) || $_SESSION['logged'] != 1) {
header('Refresh: 5; URL=login.php?redirect=' . $_SERVER['PHP_SELF']);
echo '<p>You will be redirected to the login page in 5 seconds.</p>';
echo '<p>If your browser doesn\’t redirect you properly automatically, ' .

'<a href="login.php?redirect=' . $_SERVER['PHP_SELF'] .' ">click here</a>.</p>';
die();
}
?>
-------------------------------

Non essendomi ancora loggato DOVREI essere reindirizzato al file login.php MA QUESTO NON ACCADE.

Apro allora il file login.php. Digito le password(al momento indicate nel file stesso). DOVREI essere indirizzato al file secret.php, ma NON SOLO questo non avviene, username e passwors( asterischi) rimangono lì statici come se non avvenissene nessuna azione!!
Eppure nel libro lo da per funzionante! :gun:
Sicuramente c'è un errore, ma non riesco a trovarlo...mi date una mano?
---------login.php-------
<?php
session_start();

include 'db.inc.php';
// filter incoming values
$username = (isset($_POST['username'])) ? trim($_POST['username']) : '';
$password = (isset($_POST['password'])) ? $_POST['password'] : '';
$redirect = (isset($_REQUEST['redirect'])) ? $_REQUEST['redirect'] : 'secret.php';

if (isset($_POST['submit'])) {
if (!isset($_SESSION['logged']) || $_SESSION['logged']!= 1) {

if (!empty($_POST['username']) && $_POST['username'] == 'wroxbooks' && !empty($_POST['password']) && $_POST['password'] == 'aregreat') {

$_SESSION['username'] = $username;
$_SESSION['logged'] = 1;

header ('Refresh: 5; URL=' . $redirect);
echo "<p>You will be redirected to your original page request.</p>";
echo '<p>If your browser doesn't redirect you properly automatically, ' .
'<a href="' . $redirect . '">click here</a>.</p>';


die();
} else {
// set these explicitly just to make sure
$_SESSION['username'] = '';
$_SESSION['logged'] = 0;


$error = '<p><strong>You have supplied an invalid username and/or ' .
'password!</strong>Please <a href="register.php">click here ' .
'to register</a>if you have not done so already.</p>';
}
}
}

?>

<html>
<head>
<title>Login</title>
</head>
<body>
<?php
if (isset($error)) {
echo $error;
}
?>
<form action="login.php" method="post">
<table>
<tr>
<td>Username:</td>
<td><input type="text" name="username" maxlength="20" size="20"
value="<?php echo $username; ?>"/></td>
</tr><tr>
<td>Password:</td>
<td><input type="password" name="password" maxlength="20" size="20"
value="<?php echo $password; ?>"/></td>
</tr><tr>
<td> </td>
<td>
<input type="hidden" name="redirect" value="<?php echo $redirect ?>"/>
<input type="submit" name="submit" value="Login"/>
</tr>
</table>
</form>
</body>
</html>
------------------------------------------------

Grazie mille a chi mi aiuterà a capire dov'è l'errore o la mancanza di qualcosa.
PS. Ho postato la stessa richiesta sul forum php di Html.it...ma forse li non amano i newbye..
Buona giornata a tutti
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
ti posto quanto scritto nel manuale php

http://www.php.net/manual/en/function.header.php

Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.
Rissumendo in italiano:
Ricordati che header deve essere inserito prima di ogni output html…..
E’ un comune errore scrivere il codice dopo include() o require()…..
ti fai un include e poi l'header, probabilmente dovresti mettere il codice direttamente nella pagina al posto dell'include
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
quando il form non invia di solito è dovuto al fatto che l'action è sbagliata, sei sicuro che il nome della pagina a cui mandi i dati sia corretto?
 

eddie

Nuovo Utente
25 Nov 2009
8
0
0
quando il form non invia di solito è dovuto al fatto che l'action è sbagliata, sei sicuro che il nome della pagina a cui mandi i dati sia corretto?

Trovato; mannaggia ai refusi non corretti!!!! :book:

Mi sono riletto per l'ennesima volta il codice e ad un certo punto vengo folgorato dal ricordo; avevo usato session_start() in occasione di alcuni test sulle sessioni, appunto, $_SESSION['username']....ma che ci faceva nel file login.php nel quale non c'è nessuna sessione?
Vuoi vedere che .....lo tolgo e refreshio il server.
Alleluia!!!!
:incazz2: Un pomeriggio perso. Adesso mando una lettera di fuoco a quelli della Wrox ( Beginning PHP 6, Apache, MySQL 6 Web Development)

Grazie a te eliox e a Borgo Italia per le risposte che mi hanno fatto riflettere. PS. Nonostante il manuale php indichi appunto l'include prima dell'header come errore, tutti gli esempi del libro sono fatti con gli include ed i require prima...è scritto da programmatori...bah...
Ciao
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
.. il manuale php indichi appunto l'include prima dell'header come errore, tutti gli esempi del libro sono fatti con gli include ed i require prima...è scritto da programmatori...bah...
Ciao
mi fa venire qualche dubbio sulla validità del manuale..
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
ciao


ma non ci sono più certezze a quasto mondo?
in teoria non dovrebbe essere il manuale ufficiale?
mi si è disorientato il Borgo :)
credo parlasse del libro che ha comprato, non di php.net.
Diversamente sono io quello disorientato :)