OVH Cloud OVH Cloud

Cookie pas reconnu

13 réponses
Avatar
Nicolas Montessuit
Bonjour,

j'ai deux scripts perl, un qui genere un cookie, l'autre
qui lit le cookie.

Voici les scripts :
--------------------------------------------------------
#!/usr/bin/perl -w
# cookie-set.cgi Définir un cookie

use CGI qw(:standard);

unless (param()) {
# display form
print
header(),
start_html("Cookie Baker"),
h1("Cookie Baker"),
start_form(),
p("Quel est votre nom ?", textfield("NAME")),
submit(),
end_form(),
end_html();
} else {
# Traiter le formulaire et définir le cookie
$name = param("NAME");
$to_set = cookie(-name => "username",
-value => $name,
-expires => "+60s",
-path => ".",
);
print
header(-cookie => $to_set),
start_html("Merci !"),
h1("Merci d'avoir utilisé le Cookie Baker"),
p("Je définis votre nom en ", b($name),
"et je m'en souviendrai si vous revenez ",
a({-href => "cookie-get.pl"}, "ici"),
" dans les 30 prochaines secondes."),
end_html();
}
-----------------------------------------------------
!/usr/bin/perl -w
# cookie-get.cgi Extraire la valeur d'un cookie
use CGI qw(:standard);

$name = cookie("username");

print
header(),
start_html("Bonjour $name"),
h1("Bonjour " . $name || "étranger");
if ($name) {
print p("Vous voyez, j'ai retenu votre nom !");
} else {
print p("Le cookie doit avoir expiré.");
}
print end_html();
----------------------------------------------------

Quand je lance cookie-set.pl depuis mon serveur
http://bluemoon.anoptique.net/cgi-bin/cookie-set.pl
le cookie est vraiment créé mais cookie-get.pl
n'arrive pas à le lire !!!

Savez vous ce qui déconne là-dedans ?

10 réponses

1 2
Avatar
Thibaud
$name = cookie("username");
Savez vous ce qui déconne là-dedans ?



Ecrire
$param{'nom'}="lenom";
$the_cookie = cookie(-name=>'username', -value=>%param, -expires=>'+8760h', -secure=>0);
Relire
%param = cookie('username');
$name=$param{'name'};


Avatar
Nicolas Montessuit
Thibaud wrote:


$name = cookie("username");
Savez vous ce qui déconne là-dedans ?



Ecrire
$param{'nom'}="lenom";
$the_cookie = cookie(-name=>'username', -value=>%param,
-expires=>'+8760h', -secure=>0); Relire
%param = cookie('username');
$name=$param{'name'};


Bonne idée mais ca continue a ne pas marcher...

(J'ai fait comme vous dites mais ceux qui vont sur
http://bluemoon.anoptique.net/cgi-bin/cookie-set.pl
peuvent voir que ca ne marche pas mieux...)



Avatar
Paul Gaborit
À (at) Mon, 05 Jun 2006 22:59:56 +0200,
Nicolas Montessuit écrivait (wrote):
Bonne idée mais ca continue a ne pas marcher...

(J'ai fait comme vous dites mais ceux qui vont sur
http://bluemoon.anoptique.net/cgi-bin/cookie-set.pl
peuvent voir que ca ne marche pas mieux...)


Vous définissez un cookie avec le path '.../cookie-set.pl' et vous
tentez de le lire avec un path qui est '.../cookie-get.pl' !

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Paul Gaborit
À (at) Mon, 05 Jun 2006 22:59:56 +0200,
Nicolas Montessuit écrivait (wrote):
Bonne idée mais ca continue a ne pas marcher...

(J'ai fait comme vous dites mais ceux qui vont sur
http://bluemoon.anoptique.net/cgi-bin/cookie-set.pl
peuvent voir que ca ne marche pas mieux...)


Vous définissez un cookie avec le path '.../cookie-set.pl' et vous
tentez de le lire avec un path qui est '.../cookie-get.pl' !

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Nicolas Montessuit
Paul Gaborit wrote:
Vous définissez un cookie avec le path '.../cookie-set.pl' et vous
tentez de le lire avec un path qui est '.../cookie-get.pl' !


Vous m'intéressez... A quel moment déclaré-je le path de
cookie-get.pl ?

Que dois-je mettre en clair pour que ca marche ? Un path
absolu ?

Merci beaucoup pour votre aide ?

Avatar
Paul Gaborit
À (at) Mon, 05 Jun 2006 23:49:28 +0200,
Nicolas Montessuit écrivait (wrote):
Paul Gaborit wrote:
Vous définissez un cookie avec le path '.../cookie-set.pl' et vous
tentez de le lire avec un path qui est '.../cookie-get.pl' !


Vous m'intéressez... A quel moment déclaré-je le path de
cookie-get.pl ?


Dans votre exemple initial, vous utilisiez "." comme argument à
'-path' lors de la construction du cookie. Dans les autres exemples,
après un rapide coup d'oeil, je pense que c'est le path et le domaine
par défaut qui sont utilisés (consrtuits à partir de l'URL complet du
script).

Que dois-je mettre en clair pour que ca marche ? Un path
absolu ?


Vous devez comprendre à quoi sert ce chemin (Path) et ce domaine
(Domain) en lisant soit la RFC correspondante (la RFC2965) soit la
page wikipedia suivante :

<http://en.wikipedia.org/wiki/HTTP_cookie>

en particulier ce qui concerne 'Path' et 'Domain'.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>


Avatar
Thibaud
$name=$param{'name'};
Bonne idée mais ca continue a ne pas marcher...


Oups
$name=$param{'nom'};

Avatar
Nicolas Montessuit
J'ai mis '/' comme path mais ca ne marche toujours pas

----------------------------------------------------
#!/usr/bin/perl -w
# cookie-set.cgi Définir un cookie

use CGI qw(:standard);

unless (param()) {
# display form
print
header(),
start_html("Cookie Baker"),
h1("Cookie Baker"),
start_form(),
p("Quel est votre nom ?", textfield("NAME")),
submit(),
end_form(),
end_html();
} else {
# Traiter le formulaire et définir le cookie
$name = param("NAME");
$param{nom} = $name;
$to_set = cookie(-name => "username",
-value => %param,
-expires => "+60s",
-secure => 0,
-path => '/',
);
print
header(-cookie => $to_set),
start_html("Merci !"),
h1("Merci d'avoir utilisé le Cookie Baker"),
p("Je définis votre nom en ", b($name),
"et je m'en souviendrai si vous revenez ",
a({-href => "cookie-get.pl"}, "ici"),
" dans les 30 prochaines secondes."),
end_html();
}

-------------------------------------------------
#!/usr/bin/perl -w
# cookie-get.cgi Extraire la valeur d'un cookie
use CGI qw(:standard);

%param = cookie("username", -path => '/');
$name = $param{nom};

print
header(),
start_html("Bonjour $name"),
h1("Bonjour " . $name || "étranger");
if ($name) {
print p("Vous voyez, j'ai retenu votre nom !");
} else {
print p("Le cookie doit avoir expiré.");
}
print end_html();
--------------------------------------------------

Pourtant, avec un path '/' ca devrait marcher, non ?
Avatar
Paul Gaborit
À (at) Tue, 06 Jun 2006 10:18:04 +0200,
Nicolas Montessuit écrivait (wrote):
J'ai mis '/' comme path mais ca ne marche toujours pas


En fait, en relisant la doc du module CGI, je me suis aperçu que, par
défaut, il devrait utiliser le path "/"... mais ça va mieux en le
disant explicitement.

En tous cas, maintenant, le script 'cookie-set.pl' crée bien un cookie
de nom 'username', de path '/' sur le domaine 'bluemoon.anoptique.net'.

%param = cookie("username", -path => '/');


Là, vous tentez de lire le 'cookie' envoyé par le navigateur. Il est
donc inutile de préciser le '-path'.

Si ça ne marche toujours pas, vous pouvez essayer de récupérer la
liste des noms de cookies effectivement envoyés en appelant la
fonction 'cookie' sans paramètre.

Vérifiez aussi que votre navigateur accepte bien les cookies (en
général et pour ce site en particulier).

Vous pouvez aussi tenter en mettant une durée d'expiration plus longue
car c'est en fait une date qui est transmise ce qui nécessite donc une
synchronisation parfaite des horloges du client et du serveur (dans
votre cas à 30 secondes près).

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Nicolas Montessuit
Si ça ne marche toujours pas, vous pouvez essayer de récupérer la
liste des noms de cookies effectivement envoyés en appelant la
fonction 'cookie' sans paramètre.


Bien vu, en affichant 'cookie', le vide s'affiche !

Autrement dit, il ne génère pas de cookie !

Que faire ?

1 2