Newsgroup: it.comp.www.php
Titolo: Cookie e Header

Ciao NG,
ho riscontrato un piccolo errore lavorando con i cookie....che ho risolto
con un sotterfugio (che non mi piace), ma vorrei capire perchč non funziona.
Ora vi spiego:
Ho creato un FORM per l'immisione del NICKNAME e della PASSWORD, in un file
login.php,
poi faccio processare i dati pasati tramite POST da un secondo file chiamato
loginok.php
che se verifica che i dati immessi sono corretti mi deve creare un cookie e
mi deve ridirigere ad una pagina che verifica l'esistenza di questo cookie
per farmela visualizzare...
CODICE:
<?php
if (!empty($_POST['password']) && $_POST['password']=="miapassword") {
 setcookie("PROVA2", $_POST['password'], 0, "/");
header("Location: 
http://localhost/php/areariservata.php
");
} else {
 header("Location: 
http://localhost/php/login.php?psw=false
");
}
?>
quando perň mi reindirizza alla pagina
areariservata.php
il cookie non č stato settato....
di certo č un errore mio dato che non sň ancora come funziona il PHP!!! e
sicuramente non posso settare i cookie prima di reindirizzare tramite HEADER
ad un'altra pagina, ma il nostro LIBRO non dice nulla su questo...
Sarei felice se qualcuno mi potesse illuminare sul perchč. Anche perchč ho
dovuto superare l'ostacolo in questa maniera...
CODICE:
<?php
if (!empty($_POST['password']) && $_POST['password']=="jumpaolo") {
 setcookie("PROVA2", $_POST['password'], time()+120);
 echo "<center>Dati inseriti correttamente, ora puoi accedere alla
sezione<br> <a href=\"cookie.php\">RISERVATA</a>";
} else {
 header("Location: 
http://localhost/php/login.php?psw=false
");
}
?>
e ad essere sincero sarebbe stato piů carino evitare da parte dell'utente di
dover ricliccare su un collegamento...
Come sempre a presto....
Giampaolo

  setcookie("PROVA2", $_POST['password'], 0, "/");
Perchè imposti il time expire su 0?
Così credo sia già scaduto... forse è questo il problema
e poi... Arrghh... la password in chiaro sul cookie non la metterei.
Fai almeno qualche controllo sulla password inserita ed una passfrase...
$passfrase="ambarabbaciccicocco";
// solo cartteri, numeri, trattino ed underscore
$pwd=preg_replace("'[^\w-]'","",trim($_POST['password']);
$pass_per_cookie=md5($passfrase.$pwd);
$expire= time()+120 // due minuti
setcookie("PROVA2", $pass_per_cookie , $expire , "/");
per il resto dovrebbe essere ok
ciao
Marcello

Ciao compagno di studi :-)
io ho provato in questo modo e mi funziona:
<?php
$_POST = $HTTP_POST_VARS;
$password = $_POST['password'];
$_COOKIE = $HTTP_COOKIE_VAR;
$prova = $COOKIE['prova'];
if ((!empty($password)) && ($password=="a")) {
setcookie("prova", $password, time()+43200, "/");
echo '<META HTTP-EQUIV="REFRESH" content="1;
url=
http://localhost/test.php
">';
} else {
echo '<META HTTP-EQUIV="REFRESH" content="1;
url=
http://www.password_errata.php
">';
}
?>
La redirezione č "forzata", non so se esiste un modo alternativo per fare
tutto con php.
Comunque come dicevi tu ho notato che php non riesce a settare un cookie e
subito dopo fare una redirezione di pagina, ma non ho idea del perché.
L'unica cosa che so č che la funzione setcookie() imposta un header del tipo
Set-Cookie HTTP Response header perň non capisco perché riesce comunque ad
eseguire la redirezione senza impostare il cookie, mentre mi sarei aspettato
semmai che mi impostasse il cookie ma non facesse la redirezione.
Giro la domanda a qualcuno del newsgroup, c'č il modo di impostare un cookie
e nel medesimo script fare una redirezione di pagina?
ciao Kain

 fare una redirezione di pagina?
Questo, pur essendo solo una bozza, mi funziona perfettamente
(WinXP, Apache 1.3.28, PHP 4.3.4):
- pagina index.php -
<?php
$path =
'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/';
if (isset($_COOKIE['NomeCookie']))
{
	echo 'Il cookie esiste e vale: '.$_COOKIE['NomeCookie'];
}
else
{
	setcookie('NomeCookie', 'CONTENUTO DEL COOKIE', 0);
	header ('Location: '.$path.'test.php');
	exit();
}
?>
- Pagina test.php -
<?php
if (isset($_COOKIE['NomeCookie']))
{
	echo 'Il cookie esiste e vale: '.$_COOKIE['NomeCookie'];
}
else
{
	echo 'Nessun cookie impostato.';
}
?>
HTH
Ciao.
-- 
Federico R.

 ?>
A colpo d'occhio mi sembra piuttosto simile a quello che avevo già testato,
comunque se mi dici che funziona lo provo al più presto. Adesso stò
scappando, ti faccio risapere sicuramente. Grazie mille!!
ps: dimenticsvo, io ho fatto la redirect in html, la si può fare anche in
javascript eventualmente, con document.location="test.php" però dove va
messo lo script? Io ho provato a posizionarlo in punti diversi del codice ma
non mi fungeva... te sai mica dove va messo per caso? :-) (vedi anche
"piccolo problema con cookie" di Kain poco più sotto, risposta di ..::[
Panz ]::.. )
A presto! ciao
Kain

?>
Un consiglio: non è sicuro inserire password di accesso ad un'area
riservata in un cookie, e comunque anche non inserendola è poco sicuro
comunque, meglio utilizzare le sessioni.
Saluti
Francesco Mazzi
Webmaster di AltroPC.it - 
http://www.altropc.it
 
Software libero, PHP, MySQL, Webdesign, Sicurezza, CMS, Tutorials
Per rispondere in e-mail togli NOSPAM 

 document.location="test.php" perņ dove va messo lo script?
In generale va messo quando lo script ha terminato il suo
lavoro e comunque non prima di aver creato il cookie.
setcookie('NomeCookie', 'CONTENUTO DEL COOKIE', 0);
echo '<script language="JavaScript" type="text/javascript">
<!--
document.location = "test.php";
//-->
</script>';
exit();
Ciao.
-- 
Federico R.

 ha scritto nel messaggio
news:6K%pc.273028$rM4.11...@news4.tin.it...


 perchh questa cosa????
1^ Il quoting
2^ Il manuale
Per distruggere una sessione prima devi potervi accedere, inserisci
session_start prima di session_destroy.
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
-- 
I am what I am, I do what I can
L'uomo, conscio di sbagliare, persevera.

 ?>
Purtroppo a me non funziona, come sospettavo, infatti praticamente il codice
č lo stesso che avevo usato anche io. Ho provato anche a scrivere
direttamente a mano il path, ma niente, nel senso che il cookie viene
impostato ma non mi fa la redirect.
Tra l'altro ho notato una cosa strana che devo assolutamente risolvere.
Nella cartella dei fila temporanei di internet non mi visualizza piů il
cookie. Naturalmente per individuarlo bene ho svuotato tutta la cartella ma
non c'č traccia di lui, sebbene il cookie sia stato impostato. Come č
possibile? Dove lo va a salvare IE adesso? Per quale motivo prima lo trovavo
nella cartella ...\Temporary Internet Files e adesso non c'č piů?
Mah...

 perchè questa cosa????
Come ti ha risposto Setec, forse ti sei dimenticato di aprire la sessione.
ciao Kain

 nella cartella ...\Temporary Internet Files e adesso non c'č piů?
Ho verificato e per ritrovare il cookie in quella cartella
devi impostare un expire maggiore di zero.
Prova con:
setcookie('NomeCookie', 'CONTENUTO DEL COOKIE', time()+86400);
e dovresti trovarlo. Almeno a me succede cosě.
Ciao.
-- 
Federico R.