Hallo Alain
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
Erhlich, ich habe mir bisher auch selber was zusammengebastelt. Was aber im extrem Fall auch nicht 100% Funktioniert (Unique ID in einer DB)
wir stehen ja schon länger im Diskurs,
das stimmt,
müsste mal einen ausgeben demnächst :)
Oh, da rennst du offene Wände bei mir ein ;-)
»»du legst aber immer wieder eine lernunwilligkeit an den Tag, die wirklich erschreckend ist.
wie mans nimmt ;-)
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.
»»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 :)
Na, das ist auf jeden Fall ein Argument weiter zu machen, geht mir nicht anders.
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.
Als ich mein Post abschickte, dachte ich mir fast, das da einfach was fehlte. Aber selbst mit den Angaben, ich bekam direkt eine Fehlermeldung in der Konsole.
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).
Ah, etwas gelernt, ich hab hier an der Stelle keinen Apache Server, aber das kann ja mal nützlich sein.
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...
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";
print 'einfach: $test\n';
Und selbst wenn nicht, warum steht $cooks in Anführungszeichen?
ist doch ein wert (value)
Aber den bekommst du auch ohne Anführungszeichen.
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.
Das ist ja schon und gut, stimmt aber nicht. Da du hier den Rückgabewert der Funktion login() zuweist.
$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.
Du brauchst wie weiter unten schon gesagt nur ein einziges CGI Objekt, das macht alles.
$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!
Nein, schau mal genau hin!
$cooks = $cgi->cookie(cooks => $cooks, ...
^^^^^^
Das existiert nicht. Die Funktion kennt keinen derartigen Parameter.
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?
Ja, weiter oben wolltest du den Rückgabewert der Funktion (also ein Cookie) als Wert fürt einen Cookie nehmen, das ist Unsinn
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.
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() ....
d.h. wenn du z.b. ein Skript hast, das 'login.cgi' heißt und das bindet das Modul 'cookie.pl' ein:
login.cgi:
use CGI;
require 'cookie.pl';
..... hier geht's weiter
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....
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");
werd ich mir gleich mal anschauen,muss aber jetzt schnell wech...komm aber wieder :)
Ich hab's befürchtet ;-)
Struppi.