Cookie setzen

Hiho,

ich habe folgendes Problem. Mit dem unten aufgeführten Auszug aus einem Perl-Skript überprüfe ich den Loginvorgang. Nun möchte ich noch nach erfolgreichem Login einen Cookie mit der id setzten.
Aber wie mach ich das?

Hier der Code:

sub Login {
my $yes_members = ‚‘;
my $xusername = ‚‘;
my $xpassword = ‚‘;
my $id = ‚‘;
my $cookie = ‚‘;

&SQL_CONNECT();

Check username and password

$sql_syntax = qq(SELECT ID,LOGIN,PASSWORT FROM $table_members WHERE (ACTIVE = ‚YES‘));
&SQL_EXE($dbh,$sql_syntax);
while (my $ref = $sth->fetchrow_hashref) {
$id = $ref->{ID};
$xusername = $ref->{LOGIN};
$xpassword = $ref->{PASSWORT};
if (($xusername eq $login) && ($xpassword eq $password)) { $yes_members = 1; last; }
}
$sth->finish();
$dbh->disconnect();

if ($yes_members)
{
&Template($template_show_data_for_members);
exit;
}
else
{
$ERROR = qq(Invalid User);
&Template($template_login_form);
exit;
}
}

Danke im Vorraus

Dirk

ich habe folgendes Problem. Mit dem unten aufgeführten Auszug
aus einem Perl-Skript überprüfe ich den Loginvorgang. Nun
möchte ich noch nach erfolgreichem Login einen Cookie mit der
id setzten.
Aber wie mach ich das?

mit use CGI;

siehe perldoc CGI
Sektion über Cookies.

Klaus

Hiho,

ich hab jetzt mal folkenden Teil im Skript geändert:

use CGI qw/:standard/;

if ($yes_members)
{
$cookie = cookie( ‚-name‘ => ‚Firmen_ID‘,
‚-value‘ => $id,
‚-expires‘ => ‚+1h‘);

print header(’-cookie’ => $cookie);
exit;
}

Aber der Cookie wird nicht gesetzt.
Warum?

cu
Dirk

if ($yes_members)
{
$cookie = cookie( ‚-name‘ => ‚Firmen_ID‘,
‚-value‘ => $id,
‚-expires‘ => ‚+1h‘);

print header(’-cookie’ => $cookie);
exit;
}

Vielleicht weil Deine Browser Konfiguration es nicht zuläßt?
Pack mal folgende Zeilen noch dazu:
-domain => „$ENV{‚SERVER‘}“,
-path => ‚/‘,
bzw.
-domain => ‚name.DeinesServers.de‘,
-path => ‚/cgi-bin‘,

Woran siehst Du, dass er es nicht annimt?

Hiho,

Vielleicht weil Deine Browser Konfiguration es nicht zuläßt?
Pack mal folgende Zeilen noch dazu:
-domain => „$ENV{‚SERVER‘}“,
-path => ‚/‘,
bzw.
-domain => ‚name.DeinesServers.de‘,
-path => ‚/cgi-bin‘,

Hat beides nichts geändert

Woran siehst Du, dass er es nicht annimt?

Ich hab meinen Browser so eingestellt, das ich Bestätigen muss, wenn ein Cookie gesetzt werden soll. Und da kommt dann nix. Außerdem taucht auch kein Cookie in den Temporären INternetfiles auf.

Woran siehst Du, dass er es nicht annimt?

Ich hab meinen Browser so eingestellt, das ich Bestätigen
muss, wenn ein Cookie gesetzt werden soll. Und da kommt dann

OK

Probier mal folgendes Testscript: Beim ersten Durchlauf sollte es nur die Zeile „Result:“ bringen. Beim 2ten Durchlauf das gesetzte Cookie TEST mit den Wertepaar „code“ und „testcookie“

#!/usr/bin/perl

use strict;
use CGI ':standard';

my $query = new CGI;
my %cookie = $query-\>cookie(-name =\> 'TEST');
my $setcookie = $query-\>cookie(-name=\>'TEST',
 -value=\>{ code =\> 'testcookie' },
 -domain =\> "$ENV{'SERVER'}",
 -path =\> '/',
 -expires =\> '+1h');
print $query-\>header(-expires=\>$expires,-cookie=\>$setcookie);

print 'Result: ';
foreach (keys %cookie) {
 print "$\_ $cookie{$\_}
";
}

Klaus

Sorry, Copy&amp:stuck_out_tongue_winking_eye:aste Fehler

Statt so
print $query-\>header(-expires=\>$expires,-cookie=\>$setcookie);
bitte so
print $query-\>header(-cookie=\>$setcookie);

Klaus

Probier mal folgendes Testscript: Beim ersten Durchlauf sollte
es nur die Zeile „Result:“ bringen. Beim 2ten Durchlauf das
gesetzte Cookie TEST mit den Wertepaar „code“ und „testcookie“

Jepp, das klappt.

Jepp, das klappt.

Dann solltest Du es genauso machen.

Wesentlicher Unterschied zu Deiner bisherigen Lösung:
cookie value wird als Hash an die „cookie“ Methode gereicht und (aber das sollte keine Rolle spielen) es wird die Objekt-orientierte Schreibweise für die Adressierung des CGI Moduls verwendet.
Du kannst Dir ja mal Spasses-halber den Unterschied im Output von Deiner um meiner Lösung anschauen - vielleicht offenbart sich ja was Interessantes. :smile:

perl script.cgi
auf der Console starten

Klaus

Besten Dank.

Dirk