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

Beitrag lesen

hallo Struppi :),

Also dann gehts auch ohne use CGI::Cookie?

Ja!

werd ich versuchen,war ja relativ,wenn mans genau nimmt einfach im vergleich zu dem,was mir vorschwebt re cookie ,aber wie ich schon gelesen habe soll cookie sehr unbeliebt sein und zudem unsicher.
http://www.perlunity.de/perl/manual/sessionmanagement_page1.shtml

Werde aber trotzdem damit weiter arbeiten,da ich ja noch andere methoden zur verfügung hätte wie z.B. IP/useragent(jaja,ich weiss unsicher:)).

so:

Lieber Alain,

wir stehen ja schon länger im Diskurs,

das stimmt,
müsste mal einen ausgeben demnächst :)

»»du legst aber immer wieder eine lernunwilligkeit an den Tag, die wirklich erschreckend ist.

wie mans nimmt ;-)

»»Ich hab dein Skript kopiert und erstmal 'use strict' eingebaut. Dann bekam ich ein paar sehr nützliche  Fehlermeldung, d.h. das Skript läuft so nicht. Das liegt aber wieder mal an solch Grundlegenden Dingen, das es mich mittlerweile wirklich wundert ob du überhaupt verstehst, was ich (und andere) dir versuchen zu erklären.

ich geb mir ja Mühe,abgesehn davon,dass mir das unmengen zeit kostet  und mir den schlaf raubt(den ich mal wieder besuchen sollte),wird diese Mühe manchmal auch belohnt mit kleinen erfolge,die süchtig machen können :)

Ich  verusch es mal im einzelnen:

use CGI::Cookie;

wo ist use strict? Wo bindest du CGI ein?

ich ahnte ja nicht,dass Du es probieren wolltest,denn sonst hätte ich  den rest des scriptes auch eingefügt.Bei mir stand auch
#!/usr/bin/perl -w
use CGI;
use strict;
my $cgi = new CGI;
use CGI::Carp qw(fatalsToBrowser);
...und es lief,jedoch nicht korrekt.

my $cooks = $ENV{'UNIQUE_ID'};

Gibt es diesen Wert? (Bei mir nicht)

das ist eine zufällig erzeugte zahl(und buchstaben vermutlich MD5 generiert) vom apache server,ich denke die ist mit einer session id zu vergleichen ,jedoch sicherer,da verschlüsselt(nehm ich an).

$cooks = login();

Warum weist du $cooks einen Wert zu, um in danch wieder zu überschreiben, würde nicht:
my $cooks = login();
ausreichen?

Die näächste Frage, die weiter unten geklärt wird, was für einen Wert hat $cooks?

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

Was ist $cgi? Wo hast du das definert?

siehe oben

my $cookie = $cgi->cookie(-name=>'TLogin',
-value=>'$cooks',
-expires=>'+2d',
-path=>'/');

Du kennst den Unterschied zwischen einfachen und doppelten Anführungszeichen?

ja,doppelt bedeutet,"so wie es dasteht" oder so...

Und selbst wenn nicht, warum steht $cooks in Anführungszeichen?

ist doch ein wert (value)

Und nochmal, was für einen Wert hat $cooks?

eben eine (vermutlich) md5 generierte zahl $ENV{'UNIQUE_ID'}
z.B. "IaF9fX8AAAEAAFkN60YAAAAH" beim zweiten abruf
"K7A8E38AAAEAAFnQUCkAAAAD" dritten...
eine erklärung gibts http://www.perlunity.de/perl/forum/thread_006014.shtml
darüber.

my $query = new CGI;
print $query->header(-cookie=>$cookie),
$cgi->start_html("Login-Cookie"),

$query? $cgi? Was den jetzt?

ja diesen query wollte ich von wo kopieren wo ich ein beispiel
gelesen hatte...aber da fehlte noch was anscheinend.Sollte glaub ich alle namen(und values?) übergeben.

$cgi->p("<b>Ihr letzter Besuchszeitpunkt dieser Seite war</b>: ", $altcookie),

Hier musst du aufpassen, das Komma trennt eine Liste von Elementen. Es kann sein, dass CGI::p diese zusamenführt, aber unter Umständen erwartet p mehrere Parameter und dann passiert nicht das was du willst. Du solltest hier lieber den Punkt verwenden.

ok.

sub login
{
my $username = CGI::param('username')||'';
my $password = CGI::param('password')||'';
my $cgi = new CGI;

Wieso erzeugst du hier ein Objet CGI? In der Regel (ich selber hab noch nie einen anderen Fall erlebt) reicht ein CGI Objekt für die komplette Anwendung.

aha ok.

$cooks = $cgi->cookie(cooks => $cooks, username => $username, password => $password);
return $cooks;
}

Aha, Die Funktion login() gibt was zurück? Ein Cookie!
Wobei der Parameter cooks nicht existiert.

doch!

und weiter oben übergibst du das Cookie als Wert in eine Cookie (bzw. du willst es tust es aber nciht weil du einfache Anführungszeichen verwendest).

meinst Du das value?

Ein Cookie ist ein Objekt, das zum erzeugen des Strings, der im Header ausgegeben werden muss, dient.

CGI::header( -cookie => CGI::cookie() );

für CGI::cookie kanst du natürlich auch eine Variabel nehmen, in deinem Fall den Rückgabewert der Funktion login()

CGI::header( -cookie => $cooks );

Da sind soviele Fehler drin, es ist wirklich erschreckend. Ich vermute du fängst erst an zu programmieren und dann leist du, wenn überhaupt, die Dokumentation der von dir verwendeten Module?

Das CGI Modul ist sehr mächtig und nützlich (ich weiß das habe ich dir schon gesagt) und deshalb ist die Dokumentation auch sehr umfangreich, aber im grossen und ganzen steht alles drin was man Wissen muss. Und ich rate dir sie zu lesen, bevor du weitermachst. Du fährst mit deinem Shop so gegen die Wand und wirst am Ende nichts rauskriegen was dir oder jemand anders Freude breitet, evtl. willst du lieber osCommerce verwenden, ein fertiges, kostenloses Programm, das viel mehr kannst, als du jemals zusammenkriegen wirst.

so wenig vertrauen?Mein shop läuft (jetzt) perfekt,das hier ist ein anderes problem was mit meinem shop nichts zu tun hat,so nebenbei.Eher ein script für luxus  :)

Ich weiß nicht 100% was dein Skript machen sollte. aber hier ist eine Version, die läuft.

das script soll daten in ein login.cgi(wo Du mir auch schon geholfen hast damals) script für den memberbereich einfügen,falls cookie aktiviert beim anwender und der sich einmal mit erfolg eingeloggt hat.das cookiescript.cgi wird auf der htmlseite eingebunden wo sich das loginformular befindet,welches dann auf login.cgi zielt.
Hab mir auch schon überlegt das cookie modul gleich ins login.cgi einzubinden,weiss aber nicht obs geht.

use strict;
use CGI;
my $cgi = new CGI;

my $cookies = login();

my $altcookie = $cgi->cookie(-name=>'TLogin')||'unbekannt';
my $name = $cgi->cookie(-name=>'name') || 'unbekannt';
my $pwd = $cgi->cookie(-name=>'password') || '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: ') .  $name .'/'. $pwd  ),
$cgi->end_html();

sub login
{
my $username = CGI::param('username')||'';
my $password = CGI::param('password')||'';
return [ $cgi->cookie( -name => 'name', -value => $username) ,
         $cgi->cookie( -name => 'password', -value => $password) ];
}

werd ich mir gleich mal anschauen,muss aber jetzt schnell wech...komm aber wieder :)
Grüsse
Alain