use Perl::Forum;

perl a cookie

perl a cookie

by Michal Bilinski -
Number of replies: 3
Cos dziwnego sie dzieje i nie za bardzo umiem to wytlumaczyc...Nie moge kontynuowac pracy, bo zatrzymalem sie na tym problemie i kompletnie nie wiem dlaczego ma on miejsce..

Opis:

# jezeli przekazalem imie jako parametr to wysylam cookie z
# imieniem na komputer

if ( param('imie') )
{
my $cookie = cookie(
-NAME => 'imie',
-VALUE => param('imie'),
-EXPIRES => '0',
);
print header(-COOKIE => $cookie);
}



# a tutaj prosze zeby zmienna imie miala wartosc imienia z
# ciasteczka

my $imie = cookie('imie');



# jezeli imie jest nieznane (czyli teoretycznie gdy nie ma
# ciasteczka z imieniem na komputerze to prosi o podanie imienia

if (! $imie)
{
print start_form();
print "Podaj swoje imię: ", textfield('imie');
print submit('OK');
print end_form();
}

Problem polega na tym, ze nawet jak ciasteczko jest na komputerze, to:

w operze prosi mnie o podanie imienia, ale ja tego nie robie, wciskam F5 i juz zna moje imie (wyciaga z ciasteczka), mimo ze za pierwszym razem powinien je miec...

w MSIE prosi mnie o podanie imienia, odswiezanie nie pomaga. Gdy podam mu imie, on nadal go nie widzi i dopiero powtorne odswiezenie strony sprawia, ze skrypt wie jak sie nazywam...

Co robie zle? wydaje mi sie ze przypisanie zmiennej $imie wartosci ciasteczka powinno byc dobrze interetowane zawsze gdy na komputerze istnieje ciacho i w dalszej czesci skryptu zmienna $imie powinna miec juz prawidlowa wartosc...

Prosze o jakas podpowiedz
In reply to Michal Bilinski

Odp: perl a cookie

by Marian Rusek -
  • Header musi być drukowany zawsze, a nie tylko wtedy, gdy wpisał pan imię. U mnie w firefoxie pana skrypt wogóle nie pytał się o imię, bo przeglądarka nie wiedziała, że ma ziterpretować formularz jako stronę html.
  • Przy drugim wywołaniu ciasteczko jest dopiero umieszczane w przeglądarce więc funkcja cookie zwraca wartość pustą. Dlatego musiał pan ponownie odświerzać.

Po tych dwóch poprawkach działa:


use CGI (":standard");
# jezeli przekazalem imie jako parametr to wysylam cookie z
# imieniem na komputer

if ( param('imie') )
{
my $cookie = cookie(
-NAME => 'imie',
-VALUE => param('imie'),
-EXPIRES => '0',
);
print header (-COOKIE => $cookie);
}
else
{
print header ();
}



# a tutaj prosze zeby zmienna imie miala wartosc imienia z
# ciasteczka

$imie = cookie('imie') || param('imie');



# jezeli imie jest nieznane (czyli teoretycznie gdy nie ma
# ciasteczka z imieniem na komputerze to prosi o podanie imienia

if (! $imie)
{
print start_form();
print "Podaj swoje imię: ", textfield('imie');
print submit('OK');
print end_form();
}
else
{
print p ("Masz na imie $imie");
}
In reply to Marian Rusek

Odp: perl a cookie

by Michal Bilinski -
No tak! Ale glupio, ze nie sam na to nie wpadlem. Teraz to sie takie jasne wydaje! :P. No nic, ja zmienilem zdanie i zrobilem na zasadzie przekazywania parametrow ukrytych :). Dziala bardzo ladnie i przegladarka nie musi miec wlaczonej obslugi ciasteczek ;).

Tak czy inaczej, dziekuję za odpowiedź,
pozdrawiam,
MB.