Cookie mit Perl auslesen

Cookie mit Perl auslesen

am 03.03.2007 17:12:42 von bibe2001

Hallo,
ich habe in einem PHP-Skript mit setcookie() ein Cookie gesetzt, das nun
sicher vorhanden ist und das noch nicht abgelaufen ist.

Den Wert des Cookies möchte ich nun von der gleichen Domäne aus mit
einem Perl-Skript auslesen. Das habe ich wie folgt versucht:

#!/usr/bin/perl
use CGI;
use strict;
use warnings;
use diagnostics;

my $query = new CGI;
my $cookievalue = $query->cookie(-name=>'Testcookie');

print "Content-type: text/html\n\n";

if ($cookievalue) {
print $cookievalue;
}
else {
print "Cookie nicht gefunden.";
}

Leider scheint $ccokievalue immer leer zu sein, so dass die Meldung
kommt, dass kein Cookie gefunden werden konnte.

Was mache ich falsch? Wie kann ich den Wert des Cookies auslesen?

Vielen Dank, viele Grüße
Thomas

Re: Cookie mit Perl auslesen

am 03.03.2007 17:17:40 von unknown

Post removed (X-No-Archive: yes)

Re: Cookie mit Perl auslesen

am 03.03.2007 17:23:59 von Wolf Behrenhoff

Thomas Müller schrieb:
> Hallo,
> ich habe in einem PHP-Skript mit setcookie() ein Cookie gesetzt, das nun
> sicher vorhanden ist und das noch nicht abgelaufen ist.
>
> Den Wert des Cookies möchte ich nun von der gleichen Domäne aus mit
> einem Perl-Skript auslesen. Das habe ich wie folgt versucht:

Bist du ganz sicher, dass dein Cookie gesetzt ist? Ich habe dein Script
ausprobiert - und es funktioniert bei mir, d.h. es liefert einen Cookie,
wenn einer gesetzt ist!

Wolf

Re: Cookie mit Perl auslesen

am 03.03.2007 17:26:33 von unknown

Post removed (X-No-Archive: yes)

Re: Cookie mit Perl auslesen

am 03.03.2007 17:31:42 von Frank Seitz

Michael Holzt wrote:
> Wolf Behrenhoff wrote:
>
>>Bist du ganz sicher, dass dein Cookie gesetzt ist? Ich habe dein Script
>>ausprobiert - und es funktioniert bei mir, d.h. es liefert einen Cookie,
>>wenn einer gesetzt ist!
>
> Das kann ich mir eigentlich nicht vorstellen. Laut Manpage von CGI liefert
> der Aufruf von cookie() mit Parameter -name einen Cookie zurück, den man
> dann an den Browser schicken kann, nicht den Wert eines Cookies.

Nee, laut Manpage wird ein Cookie abgefragt, indem
-value nicht angegeben wird. Du hast die Stelle selbst zitiert.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: Cookie mit Perl auslesen

am 03.03.2007 17:39:29 von Frank Seitz

Michael Holzt wrote:
> Frank Seitz wrote:
>>
>>Nee, laut Manpage wird ein Cookie abgefragt, indem
>>-value nicht angegeben wird. Du hast die Stelle selbst zitiert.
>
> Zum Abfragen wird laut manpage aber auch nicht -name verwendet.

Kann man man wohl weglassen, wenn der Name
der einzige Parameter ist.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: Cookie mit Perl auslesen

am 03.03.2007 17:39:32 von Michael Holzt

Frank Seitz wrote:
> Nee, laut Manpage wird ein Cookie abgefragt, indem
> -value nicht angegeben wird. Du hast die Stelle selbst zitiert.

Zum Abfragen wird laut manpage aber auch nicht -name verwendet. Allerdings
geht der Aufruf mit "-name" offenbar auch:

| $ env HTTP_COOKIE="foo=bar" perl -e 'use CGI qw|:standard|;
| print cookie(-name=>"foo") . "\n";'
| bar

--
What is the difference between Scientology and Microsoft? One is an
evil cult bent on world domination and the other was begun by L. Ron
Hubbard.
-- anonym von slashdot.org

Re: Cookie mit Perl auslesen

am 03.03.2007 17:59:03 von Wolf Behrenhoff

Michael Holzt schrieb:
> Frank Seitz wrote:
>> Nee, laut Manpage wird ein Cookie abgefragt, indem
>> -value nicht angegeben wird. Du hast die Stelle selbst zitiert.
>
> Zum Abfragen wird laut manpage aber auch nicht -name verwendet. Allerdings
> geht der Aufruf mit "-name" offenbar auch:

Natürlich geht das.

CGI erlaubt oft mehrere Möglichkeiten, Parameter zu übergeben. Einmal
kann man mit -name => usw. arbeiten oder man lässt das weg und benutzt
eine spezielle Reihenfolge. Dazu wird rearrange aus CGI::Util verwendet.
Es ist also völlig egal, ob du cookie(-name => 'foo') oder cookie('foo')
schreibst. Die Reihenfolge kannst du CGI.pm entnehmen (name, value,
path, ...)

Wolf

Re: Cookie mit Perl auslesen

am 03.03.2007 19:21:16 von bibe2001

Hallo,
vielen Dank für die schnelle Antwort!

>> ich habe in einem PHP-Skript mit setcookie() ein Cookie gesetzt, das nun
>> sicher vorhanden ist und das noch nicht abgelaufen ist.
>>
>> Den Wert des Cookies möchte ich nun von der gleichen Domäne aus mit
>> einem Perl-Skript auslesen. Das habe ich wie folgt versucht:
>
> Bist du ganz sicher, dass dein Cookie gesetzt ist? Ich habe dein Script
> ausprobiert - und es funktioniert bei mir, d.h. es liefert einen Cookie,
> wenn einer gesetzt ist!

Du hast vollkommen Recht. Ich habe das Script soeben auf einem anderen
Server getestet und da wird der vorab mit PHP gesetzte Cookie
einwandfrei ausgelesen.

Nun die Frage: Woran kann es (serverbedingt) liegen, dass folgende
Zeilen ein definitiv vorhandenes Cookie nicht auslesen können?

#!/usr/bin/perl
use CGI;
use strict;
use warnings;
use diagnostics;

my $query = new CGI;
my $cookievalue = $query->cookie(-name=>'Testcookie');

print "Content-type: text/html\n\n";

if ($cookievalue) {
print $cookievalue;
}
else {
print "Cookie nicht gefunden.";
}

Im error.log vom Apachen sind leider keine Hinweise zu finden. Für
weitere Antworten wäre ich sehr dankbar!

Viele Grüße
Thomas

Re: Cookie mit Perl auslesen

am 03.03.2007 19:50:46 von Wolf Behrenhoff

Thomas Müller schrieb:
>> Bist du ganz sicher, dass dein Cookie gesetzt ist? Ich habe dein Script
>> ausprobiert - und es funktioniert bei mir, d.h. es liefert einen Cookie,
>> wenn einer gesetzt ist!
>
> Du hast vollkommen Recht. Ich habe das Script soeben auf einem anderen
> Server getestet und da wird der vorab mit PHP gesetzte Cookie
> einwandfrei ausgelesen.
>
> Nun die Frage: Woran kann es (serverbedingt) liegen, dass folgende
> Zeilen ein definitiv vorhandenes Cookie nicht auslesen können?

Serverbedingt: daran liegt es vermutlich sowieso nicht. Cookies werden
ja gerade nicht auf einem Server gespeichert, sondern vom Browser des
Clients.

Also: ich weiß ja nicht, welchen Browser du nutzt, aber schau doch
einfach mal in deinem Browser nach, ob der entspr. Cookie gesetzt ist.
Und dann nimm Wireshark und gucke nach, ob dein Browser den Cookie auch
sendet.

Wolf

Re: Cookie mit Perl auslesen

am 03.03.2007 20:57:13 von bibe2001

Hallo!

>>> Bist du ganz sicher, dass dein Cookie gesetzt ist? Ich habe dein Script
>>> ausprobiert - und es funktioniert bei mir, d.h. es liefert einen Cookie,
>>> wenn einer gesetzt ist!
>> Du hast vollkommen Recht. Ich habe das Script soeben auf einem anderen
>> Server getestet und da wird der vorab mit PHP gesetzte Cookie
>> einwandfrei ausgelesen.
>>
>> Nun die Frage: Woran kann es (serverbedingt) liegen, dass folgende
>> Zeilen ein definitiv vorhandenes Cookie nicht auslesen können?
>
> Serverbedingt: daran liegt es vermutlich sowieso nicht. Cookies werden
> ja gerade nicht auf einem Server gespeichert, sondern vom Browser des
> Clients.
>
> Also: ich weiß ja nicht, welchen Browser du nutzt, aber schau doch
> einfach mal in deinem Browser nach, ob der entspr. Cookie gesetzt ist.
> Und dann nimm Wireshark und gucke nach, ob dein Browser den Cookie auch
> sendet.

Naja, Cookies werden durch entsprechende Anweisungen im HTTP-Header, den
der Server zusammenbaut, durch den Klient gesetzt. Völlig unbeteiligt
ist der Server also nicht.

Ich habe dasselbe Skript auf zwei unterschiedliche Server geladen und
teste es auf zwei Tabs in einem Browserfenster. Die Einstellungen des
Browsers sind definitiv gleich. Durch das PHP-Skript wird durch beide
Server ein entsprechendes Cookie gesetzt, das habe ich überprüft. Das
Perlskript kann aber eben nur auf dem einen Server den Wert mit dem
bekannten Skript auslesen, auf dem andren ist $cookievalue nach wie vor
leer.

Daher vermute ich, dass dem Server noch irgendwas fehlt. Leider habe ich
keine Ahnung, was das sein könnte oder in welcher Richtung ich suchen soll.

Bin für jeden weiteren Tipp dankbar!
Viele Grüße
Thomas

Re: Cookie mit Perl auslesen

am 03.03.2007 21:22:01 von Wolf Behrenhoff

Thomas Müller schrieb:
> Hallo!
>
> Ich habe dasselbe Skript auf zwei unterschiedliche Server geladen und
> teste es auf zwei Tabs in einem Browserfenster. Die Einstellungen des
> Browsers sind definitiv gleich. Durch das PHP-Skript wird durch beide
> Server ein entsprechendes Cookie gesetzt, das habe ich überprüft. Das
> Perlskript kann aber eben nur auf dem einen Server den Wert mit dem
> bekannten Skript auslesen, auf dem andren ist $cookievalue nach wie vor
> leer.

Hast du auch überprüft, dass der Browser den Cookie wirklich sendet?

> Daher vermute ich, dass dem Server noch irgendwas fehlt. Leider habe ich
> keine Ahnung, was das sein könnte oder in welcher Richtung ich suchen soll.

Du kannst ja dieses kleine Script ja mal probieren:
use strict;
use warnings;
use Data::Dumper;
use CGI qw(:standard);
print header(
-cookie => cookie(-name => 'ngtest', -value => scalar localtime,
-expires => '+1h'),
-type => 'text/plain'
);
print Dumper cookie('ngtest');

Das sollte immer die Zeit des vorherigen Aufrufs anzeigen bzw. undef
beim ersten Mal.

Wenn das funktioniert, liegt dein Problem nicht beim Webserver.

Wolf

Re: Cookie mit Perl auslesen

am 03.03.2007 22:04:29 von hjp-usenet2

On 2007-03-03 19:57, Thomas Müller wrote:
>> Also: ich weiß ja nicht, welchen Browser du nutzt, aber schau doch
>> einfach mal in deinem Browser nach, ob der entspr. Cookie gesetzt ist.
>> Und dann nimm Wireshark und gucke nach, ob dein Browser den Cookie auch
>> sendet.
>
> Naja, Cookies werden durch entsprechende Anweisungen im HTTP-Header, den
> der Server zusammenbaut, durch den Klient gesetzt. Völlig unbeteiligt
> ist der Server also nicht.

Ja, aber den Teil erledigt bei Dir ein PHP-Script, somit ist das hier
off-topic :-).


> Ich habe dasselbe Skript auf zwei unterschiedliche Server geladen und
> teste es auf zwei Tabs in einem Browserfenster. Die Einstellungen des
> Browsers sind definitiv gleich.

Das lässt sich aus diesen Angaben aber nicht schließen. Zumindest die
Mozillen, aber auch andere Browser, können unterschiedliche
Einstellungen für Cookies pro Domain haben. Einmal "Deny cookies from
this server" angeklickt, und schon funktionieren die Cookies nicht mehr
....

Am sinnvollsten ist wirklich, du verwendest Wireshark (oder einen
anderen Sniffer) um zu sehen, was der Browser tatsächlich sendet.
Ein Blick in die Browser-Einstellungen schadet aber auch nicht.

hp


--
_ | Peter J. Holzer | Es ist ganz einfach ihn zu verstehen, wenn
|_|_) | Sysadmin WSR | man nur alle wichtigen Worte im Satz durch
| | | hjp@hjp.at | andere ersetzt.
__/ | http://www.hjp.at/ | -- Nils Ketelsen in danr

Re: Cookie mit Perl auslesen

am 03.03.2007 22:43:47 von Frank Seitz

Thomas Müller wrote:

> Naja, Cookies werden durch entsprechende Anweisungen im HTTP-Header, den
> der Server zusammenbaut, durch den Klient gesetzt. Völlig unbeteiligt
> ist der Server also nicht.

Der Server setzt keine Cookies, sprich Set-Cookie-Header.
Das macht das CGI-Skript.

> Ich habe dasselbe Skript auf zwei unterschiedliche Server geladen und
> teste es auf zwei Tabs in einem Browserfenster. Die Einstellungen des
> Browsers sind definitiv gleich. Durch das PHP-Skript wird durch beide
> Server ein entsprechendes Cookie gesetzt, das habe ich überprüft.

Hast Du auch überprüft, dass der Browser den Cookie
in beiden Fällen annimmt?

> Das Perlskript kann aber eben nur auf dem einen Server den Wert mit dem
> bekannten Skript auslesen, auf dem andren ist $cookievalue nach wie vor
> leer.

Dann schickt der Browser in einem Fall den Cookie nicht an
Dein Perl-Skript.

> Daher vermute ich, dass dem Server noch irgendwas fehlt. Leider habe ich
> keine Ahnung, was das sein könnte oder in welcher Richtung ich suchen soll.

Wie sieht der Aufruf aus, mit dem Du den Cookie setzt?

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: Cookie mit Perl auslesen

am 04.03.2007 19:14:35 von bibe2001

Hallo!

>> Ich habe dasselbe Skript auf zwei unterschiedliche Server geladen und
>> teste es auf zwei Tabs in einem Browserfenster. Die Einstellungen des
>> Browsers sind definitiv gleich. Durch das PHP-Skript wird durch beide
>> Server ein entsprechendes Cookie gesetzt, das habe ich überprüft. Das
>> Perlskript kann aber eben nur auf dem einen Server den Wert mit dem
>> bekannten Skript auslesen, auf dem andren ist $cookievalue nach wie vor
>> leer.
>
> Hast du auch überprüft, dass der Browser den Cookie wirklich sendet?
>
>> Daher vermute ich, dass dem Server noch irgendwas fehlt. Leider habe ich
>> keine Ahnung, was das sein könnte oder in welcher Richtung ich suchen soll.
>
> Du kannst ja dieses kleine Script ja mal probieren:
> use strict;
> use warnings;
> use Data::Dumper;
> use CGI qw(:standard);
> print header(
> -cookie => cookie(-name => 'ngtest', -value => scalar localtime,
> -expires => '+1h'),
> -type => 'text/plain'
> );
> print Dumper cookie('ngtest');

Vielen Dank für das Skript! Dieses kann das selbst gesetzte Cookie auch
auf dem "Problemserver" auslesen. Daraufhin konnte ich die beiden
Cookies vergleichen und einen wesentlichen Unterschied feststellen:

Die PHP-Funktion setcookie() setzt per default den Pfad, in dem das
Cookie verfügbar ist, auf das aktuelle Verzeichnis des PHP-Skripts. Das
CGI-Skript ist aber nicht im selben Ordner, kann also nicht auf das
Cookie zugreifen. Das Übergeben eines vierten path-Parameter "/" hat die
Sache gelöst. Ich wusste nicht, dass es dieses path-Attribut gibt... :(

Vielen Dank für eure tolle Hilfe!
Viele Grüße
Thomas