Alain: cookie einlesen vom server -> re test script von selfhtml

Beitrag lesen

Hallo Struppi,

müsste mal einen ausgeben demnächst :)

Oh, da rennst du offene Wände bei mir ein ;-)

wo wohnst Du denn?
Sonst müsste ich Dir ein virtuelles ??? anbieten ;-)

Ich weiß klang ein bisschen krass, aber es kommen halt leider immer wieder fehler, wo ich mich Frage wieso du das jetzt immer noch nicht kapiert hast.

naja so krass auch wieder nicht,aber es stimmt,manchmal brauch ich etwas länger bis der groschen fällt.Perl ist kein neuland mehr für mich,aber die erklärungen sind manchmal komplizierter als das problem selbst bzw. die tatsachen.Ich denke vielleicht auch anders als andere,was für manchen logisch ist,ist für mich überhaubt nicht logisch zumindest nicht immer.

In doppelten Anführungszeichen werden Variabeln interploiert, d.h. es wird der Inhalt angezeigt, in einfachen nicht. Test:
my $test = "Hallo!";
print "doppelt: $test\n";

^^^^
hmmmm nicht       "Hallo!"?

print 'einfach: $test\n';

Du brauchst wie weiter unten schon gesagt nur ein einziges CGI Objekt, das macht alles.

naja das hab ich jetzt verstanden.

Nein, schau mal genau hin!
$cooks = $cgi->cookie(cooks => $cooks, ...
                      ^^^^^^
Das existiert nicht. Die Funktion kennt keinen derartigen Parameter.

alles klar.

Wie gesagt, du brauchst in deinem CGI Skript nur ein einziges Mal das CGI Modul einzubinden und dann kannst du in allen anderen Modulen auf diese zugreifen. Aus dem Grunde bevorzuge ich mittlerweile die folgende Schreibweise:

use CGI;

print CGI::header(), CGI::start_html() ....

sieht einfach aus :)

Dann kannst du in cookie.pl auf CGI zugreifen, da es von der HAuptdatie eingebunden wurde:

cookie.pl:

my $cookie = CGI::cookie('test_cookie');

tu was damit....

die frage stellt sich jetzt,was es denn tun soll bzw. wie?
Ich meine wenns denn laufen sollte wie es läuft,würde das
script dann bei wieder erkennung die daten ins formular von der html seite einfügen,welches nicht vom cookie.cgi generiert wurde mein ich.
Das Gookie wär in meinem fall lediglich in einer login.html seite eingebunden,aber ob das script dann die daten reinschreibt bezweifle ich,zumal bei mir gehts nicht.siehe unten->

Grundsätzlich solltest du dir mal genau angucken, wie man cookies definiert und wie man sie setzt. Vor allem meherere, dazu musst du der header Funktion eine referenz auf ein Array mit gegeben:

CGI::header( -cookie => [ $cookie1, $cookie2 ....] );

Wobei $cookie1, cookie2 jeweile ein cookie Objekt ist:
$cookie1 = CGI::cookie(-name => 'test1', -value => 'ich bin cookie 1");
$cookie2 = CGI::cookie(-name => 'test2', -value => 'ich bin cookie 2");

Ich habs mir jetzt wieder mal besser angeschaut das ganze und denke aber dass es das nicht bringt was ich versuche zu tun(oben bereits beschrieben)Ich habs mal so versucht:

#!/usr/bin/perl -w
use CGI;
use strict;
use CGI::Carp qw(fatalsToBrowser);
my $cgi = new CGI;
my $cookies = login();

my $altcookie = $cgi->cookie(-name=>'TLogin')||'unbekannt';
my $un = $cgi->cookie(-name=>'un') || 'unbekannt';
my $pwd = $cgi->cookie(-name=>'pwd') || 'unbekannt';

my $now = time();

push @$cookies, $cgi->cookie(-name=>'TLogin',
-value=> "$now",
-expires=>'+2d',
-path=>'/');
print $cgi->header(-cookie=> $cookies),
$cgi->start_html("Login-Cookie"),
$cgi->p($cgi->b('Ihr letzter Besuchszeitpunkt dieser Seite war: ') . $altcookie  ),
$cgi->p($cgi->b('Als neuer Besuchszeitpunkt wurde gespeichert: '). $now  ),
$cgi->p($cgi->b('"Name / Passwort: ') .  $un .'/'. $pwd  ),
$cgi->end_html();

sub login
{
my $username = "steven"||'';
my $password = "test"||'';
return [ $cgi->cookie(-name => 'un', -value => $username),
         $cgi->cookie(-name => 'pwd', -value => $password) ];
         }

es zeigt mir schon die daten an,aber wenn ich es in meinem html einbinde dann zeigt mir der browser an dass die gookies aktuakisiert werden aber es geht nichts,kein eintrag ins formular.
Oder hab ich da jetzt etwas total missverstanden?
Wäre das ganze übrigens auch mit einem cookie realisierbar,welches das macht was ich will? (Alle daten sammeln und ins formular einfügen,so dass der benutzer nur noch enter drücken muss,um sich beim nächsten mal einzuloggen).
z.B. so:
push @$cookies, $cgi->cookie(-name=>'TLogin',
-value=> "$now|$un|$pwd", -expires=>'+2d',-path=>'/');
print $cgi->header(-cookie=> $cookies);

so,wieder später geworden...mal früher schlafen geht.
Grüsse
Alain