Newsgroup: it.comp.www.php
Titolo: problema con i cookie

OS: Windows Xp
Triangolo: apache, php, sql
Non riesco a far funzionare questo semplice script per i cookie
<?php
setcookie("test_cookie","niente di particolare",time()+43200,"/");
echo "<html>";
echo "<body>";
if (isset($test_cookie)) {
echo "Ciao cookie, i tuoi contenuti sono: $test_cookie";
} else {
echo "Non ho trovato alcun cookie con il nome test_cookie";
}
echo "</body>";
echo "</html>";
?>
PROBLEMA RISCONTRATO:
continua a darmi "Non ho trovato alcun cookie con il nome test_cookie".
Naturalmente ho chiuso il browser e l'ho riaperto ma senza risolvere.
Nella cartella di default dei cookie non mi crea il cookie $test_cookie.
DOMANDE:
1) E' corretto sotto windows impostare il percorso con "/" per indicare
tutte le cartelle?*
* Ho configurato apache in modo da lavorare sulla cartella php che si trova
in C:\php
2) A parte quanto scritto al punto 1 non credo dipenda dal codice, forse
devo configurare php.ini? e come?
ciao
Kain

 if (isset($test_cookie)) {
Ti do una semi-soluzione da testare.
Da php4, la variabile register-globals e' off di default, significa che se
anche tu avessi salvato correttamente il cookie, non potresti fare un
confronto con $test_cookie, dovresti farlo con $_COOKIES['test_cookie'].
Se hai intenzione di cambiare il valore di register-globals, te lo
sconsiglio...adeguati ad usare le superglobali $_COOKIES, $_POST, $_GET,
$_SERVER [...].
Non so dirti altro...
Buona fortuna
-- 
Gpg pubkey available on 
http://belgium.keyserver.net
Fingerprint: B804 93B8 6EB8 F34E 2DE9 66A7 129D 76BC BE76 3C7C
Linux registered user #192634

 $_SERVER [...].
Verissimo, avevo trascurato questo discorso, in effetti le register-globals
sono settate su off(per motivi di sicurezza?) comunque nonostante abbia
corretto il codice rimane il fatto che non mi crea il cookie.
Una volta trovai come settare il php.ini nella parte che riguarda i cookie
sotto windows, adesso sto cercando e cercando ma non trovo niente.
Comunque il codice corretto lo riporto sotto:

ops, mi ha inviato da solo quando stavo incollando il codice:
<?php
setcookie("test_cookie","niente di particolare",time()+43200,"/");
echo "<html>";
echo "<body>";
$test_cookie = $_COOKIES['test_cookie'];
if (isset($test_cookie)) {
echo "Ciao cookie, i tuoi contenuti sono: $test_cookie";
} else {
echo "Non ho trovato alcun cookie con il nome test_cookie";
}
echo "</body>";
echo "</html>";
?>
Grazie per il suggerimento delle variabili globali!!
Kain

 ha detto:

Classico errore: i cookies sono disponibili solo nelle pagine
successive a quella in cui sono stati settati. Crea un altro file per
la visualizzazione del cookie.
Ciao
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 

 Ciao
Capisco cosa vuoi dire ma nel mio esempio è sufficiente eseguire una prima
volta lo script dal browser per *impostare* il cookie(cosa che non accade
perché nella directory specificata in session.cookie_path del file php.ini
non compare il cookie), poi sarebbe sufficiente ricaricare la pagina
affinché il cookie venisse rinviato dal client al server(locale) ed a questo
punto i contenuti del cookie verrebbero letti.
Il problema di fondo, per concludere, è che non viene creato alcun cookie...
Ricordo in passato che si doveva dare una particolare configurazione al file
php.ini sotto windows per far funzionare i cookie, ed infatti allora mi
funzionavano, cioè venivano creati nella cartella dedicata ai cookie, ma
adesso non trovo più nessuna guida o riferimento alla configurazione del
file php.ini per risolvere questo problema.
Kain

 Da php4, la variabile register-globals e' off di default, 
PHP>4.2.0
-- 
Spoken: How much is that gorilla in the window?
Take our advice, At any price, A gorilla like Magilla is mighty nice.
Gorilla, Magilla Gorilla for sale

file php.ini per risolvere questo problema.
Guarda che i cookie vengono creati sul client, non è che ti confondi
con le sessioni, in cui vengono creati dei file di sessione sul
server?


 server?
Certo, lo so, come detto sopra mi ero confuso un attimo perché lavoro in
locale, ma è appurato che i cookie("biscottini") vengono messi sulla
cartella di default indicata dalle impostazioni del browser del client.
Comunque ricordo che in passato avevo avuto lo stesso problema perché
appunto non ricevevo alcun cookie nella mia cartella, così feci una ricerca
su internet e trovai un tizio in un forum che aveva avuto lo stesso problema
sotto windows e aveva trovato da qualche parte una configurazione da
impostare sul php.ini che risolveva la cosa.
Può essere che ricordi male ma non vedo alternativa. Il mio browser ha i
cookie attivi, nel senso che li può ricevere, ed ho individuato la cartella
dove i cookie dovrebbero essere salvati.
Se anche fosse come dici tu, che lo script dà problemi(non funziona come
dovrebbe) al refresh della pagina, il cookie dovrebbe comunque impostarmelo,
ed invece, come già detto, nisba...
Kain

 PHP>4.2.0
Si, infatti, io per la cronaca ho la 4.2.3

Ho notato che impostando session.save_path = D:\php nella suddetta cartella
mi crea un file di sessione *vuoto* tipo questo
"sess_1d5d486e2e37adb15e45a406006a6cb5". Questo credo sia il file salvato
sul server mediante il quale il server, quando riceve il cookie dal client,
riconosce appunto il client stesso.
Però nella cartella locale dei cookie ancora niente! mistero...
Kain

 Per nella cartella locale dei cookie ancora niente! mistero...
Normalmente i cookie di sessione non vengono salvati sul disco fisso ma
mantenuti in memoria dal browser. Questo accade perche' i cookie di
sessione normalmente scadono all achiusura del browser.
-- 
I am what I am, I do what I can
L'uomo, conscio di sbagliare, persevera.

 sessione normalmente scadono all achiusura del browser.
Ho risolto! Se ve lo dico vi sbellicate dalle risate, ci faccio una
figuraccia ecc... ma ve lo dico lo stesso. Il cookie viene correttamente
impostato nella cartella di default, solo che dimenticavo di fare il refresh
della cartella stessa :-) ahahaha!!!
Riguardo quello che mi hai scritto, Setec, sicuramente è come dici tu, ma se
il cookie non ha impostato il *tempo di scadenza*, in tal caso alla chiusura
del browser infatti viene cancellato( dalla memoria cache?* ) . Nel mio caso
specifico lo avevo impostato su time()+43200 corrispondente a 12h di
autonomia ;-)
* Sbaglio o la memoria cache altro non è che la cartella dei file temporanei
di internet, la stessa indicata dal browser del client? Se il cookie non
viene scritto nella cache allora esiste una memoria temporanea del browser?
Devo provare a farmi uno scriptino dove il cookie scade alla chiusura del
browser.
Kain

 cache?* ) .
Siccome hai scritto riguardo session.save_path pensavo ti riferissi a
cookie di sessione. La memoria cui facevo riferimento e' la memoria
RAM, non la cache del browser.


> cookie di sessione.
cookie di sessione = cookie a scadenza zero?
Kain

 la visualizzazione del cookie.
Guarda, ho risolto facendo una piccola modifica al codice, ma lo script è
rimasto lo stesso. In pratica non mi andava
$test_cookie = $_COOKIES['test_cookie'];
perché ho il php.ini impostato in maniera tale da leggere solo
$_HTTP_COOKIE_VAR
così l'accorgimento è stato questo:
if(!isset($_COOKIE)) $_COOKIE=$HTTP_COOKIE_VARS;
$test_cookie = $_COOKIE['test_cookie'];
Così funge, provalo se vuoi(al refresh legge il cookie e cambia il flusso
dati):
<?php
setcookie("test_cookie","niente di particolare", time()+43200, "/");
echo "<html>";
echo "<body>";
if(!isset($_COOKIE)) $_COOKIE=$HTTP_COOKIE_VARS;
$test_cookie = $_COOKIE['test_cookie'];
if (isset($test_cookie)) {
echo "Ciao cookie, i tuoi contenuti sono: $test_cookie";
} else {
echo "Non ho trovato alcun cookie con il nome test_cookie";
}
echo "</body>";
echo "</html>";
?>
ciao Kain

 confronto con $test_cookie, dovresti farlo con $_COOKIES['test_cookie'].
In pratica ho dovuto fare un piccol accorgimento per leggere l'array che mi
hai descritto, eccolo:
if(!isset($_COOKIE)) {
$_COOKIE=$HTTP_COOKIE_VARS;
}
$test_cookie = $_COOKIE['test_cookie'];
perché evidentemente il mio php.ini è configurato per leggere questo array
$HTTP_COOKIE_VARS
ciao e grazie
Kain

dati):
E' vero l'ho provato anch'io e funziona :-) 
Meno male che hai risolto, spesso in questi casi c'è un qualcosa di
molto banale di cui ci si dimentica.


 Ciao
Cmq grazie anche a te, mi hai dato lo spunto per risolvere ;-)
ciao Kain

Come sapete l'argomento di questo thread che avevo aperto si č concluso
perché risolto, e vi ringrazio tutti, perň avendo riscontrato un altro
problema con i cookie, di natura diversa, ho aperto un altro thread, a
parte.
Spero mi possiate aiutare.
ciao Kain

 cookie di sessione = cookie a scadenza zero?
http://www.php.net/session
[quoto]
Al visitatore che accede al vostro sito web viene assegnato un id
unico, il cosidetto id di sessione. Questo viene registrato in un
cookie sul lato utente o è propagato tramite l'URL.
[/quoto]


 [/quoto]
Si, adesso ho capito cosa sono quei file...
nella confusione di far andare per forza i cookie ho settato
session.auto_start = 1 così ogni volta che aprivo una pagina di prova mi
andava ad impostare quel cookie di sessione come se avesse aperto una vera e
propria sessione. Adesso l'ho rimesso a 0(zero) perché voglio essere io a
controllarne il funzionamento.
thx Kain