PDA

View Full Version : [PHP] - problema con i cookie


RagingBull
07-04-2007, 14:40
premesso che è la prima volta ke lavoro con i cookie, sto cercando di creare un area privata per un sito.
fin ora o creato, per testare, questi file:

login.html per l'inserimento di username e password
<form method="post" action="login.php">
Username<br>
<input type="text" name="username"><br>
Password<br>
<input type="password" name="password"><br><br>
<input type="submit" value="Login">
</form>

login.php verifica della correttezza dei dati inseriti e scrive il cookie
<html>
<body>

<?PHP
$user = "admin";
$pass = "pass";

$username = $_POST["username"];
$password = $_POST["password"];

if ($username == $user && $password == $pass)
{
setcookie("login", "OK", time() + 600);
print "Benvenuto! Entra nell'area privata, clicca <a href='privata.php'>qui</a>";
}
else
{
print "Accesso negato!";
}
?>

</body>
</html>

privata.php pagina privata di prova
<html>
<body>

<?PHP
if ($_COOKIE["login"] == "OK")
{
?>

<p>Contenuto dell'area privata...</p>

<p><a href="logout.php">Logout</a></p>

<?PHP
}
else
{
?>

<p>Accesso negato!</p>

<?PHP
}
?>

</body>
</html>

logout.php invalida il cookie
<html>
<body>

<?PHP
setcookie("login");
print "Arrivederci!";
?>

</body>
</html>

sul mio server di testing mi da questo errore:
Warning: Cannot modify header information - headers already sent by (output started at D:\Server\test\cookie\login.php:4) in D:\Server\test\cookie\login.php on line 13

su aruba invece l'errore nn esce ma cmq il cookie nn me lo crea. come è possibile???

Psylo
07-04-2007, 16:15
con la funzione setcookie(...) devi stare attento a non generare nessun output prima di chiamarla...
nel tuo caso i tag <html> e <body> sono output generati prima della chiamata setcookie(..).

devi scrivere il tuo codice in modo che inizi a scrivere i tag <html>,<body> e tutto ciò che segue, solo dopo aver controllato i valori di user e password e aver settato il cookie di conseguenza..

una cosa del tipo:

<?PHP
$user = "admin";
$pass = "pass";

$username = $_POST["username"];
$password = $_POST["password"];

if ($username == $user && $password == $pass)
{
setcookie("login", "OK", time() + 600) ;?>
<html><body>Benvenuto! Entra nell'area privata, clicca <a href='privata.php'>qui</a></body></html>

<? }
else
{ ?>
<html><body>Accesso negato</body></html>
<? }
?>



P.s.
sono un noob con PHP, aspetta anche qualche altro suggerimento da chi ne sa di più :)

RagingBull
07-04-2007, 16:51
no no...hai imbroccato il problema....la risposta era nel manuale ufficiale di php....solo ke l'avevo interpretata male....pensavo ke i tag non dovessero stare all'interno di <?php ?> invece vale anche per i tag esterni. :fagiano:

sono un noob anche io...tranquillo nn sei solo :D

grazie ancora!