Cooki
Maui Muc
- perl
Hallo,
ich habe folgendes Problem: ich habe ein sehr einfaches Umfragesript gefunden, das eigentlich genau meinen Vorstellungen entspricht.
Beim abgeben einer Stimme setzt das Programm ein Cooki, so dass keine erneute Stimmabgegeben möglich ist (solange man nicht die Cookis löscht). Da ich nicht nur eine einzige Umfrage durchführen will sondern jeweils eine pro Quartal, möchte ich das Programm sie modifizieren, dass durch eine einfache Änderung am Code (von mir pro Quartal) das bisherige Cooki ignoriert wird und ein neues erstellt.
Leider habe ich nicht den geringsten Dunst von Perl, wie kann ich das bewerkstelligen?
Ich danke eucht schon im Voraus recht herzlich für die Hilfe
Gruß aus München
Maui Muc
Hier der Code (stammt von http://www.perl-seite.de/):
.....
#==============================================
#==============================================
if ($with_cookies =~ /^on$/i)
{
# Erlaubt Browser Cookies ?
if ($cgi->param("cookietest"))
{
if ($ENV{'HTTP_COOKIE'} !~ /Cookie=Test/)
{
error("$ENV{'HTTP_COOKIE'}<br>Ihr Browser unterstützt keine Cookies. Bitte Cookies im Browser einschalten.<br><br><a href="$cgipath">Zurück zur Umfrage</a><br>");
}
}
elsif ($ENV{'HTTP_COOKIE'} !~ /Cookie=Test/ && $ENV{'HTTP_COOKIE'} !~ /umfrage=voted/)
{
my $cookiecheck = $cgi->cookie( -name => 'Cookie',
-value => 'Test');
print $cgi->redirect(-uri=>"$ENV{'SCRIPT_NAME'}?cookietest=1", -cookie=>[$cookiecheck]);
exit;
}
if ($ENV{'HTTP_COOKIE'} =~ /umfrage=voted/)
{
$already_voted = 1;
$action = "Sie haben bereits abgestimmt.";
}
}
if (!$already_voted || $with_cookies !~ /^on$/i)
{
if (! $vote)
{
print_formular();
exit(0);
}
# ist stimme gueltig ?
foreach(@valid_vote)
{
if ($_ eq $vote)
{
$ok = 1;
}
}
error ("Antwort ist nicht gültig") if (!$ok);
if ($with_cookies =~ /^on$/i)
{
#===========================================================
# Cookie an Browser senden
#===========================================================
my $c = $cgi->cookie (
-name => "$cgipath umfrage",
-value => 'voted',
-expires => '+12M',
-path => "$cgipath",
);
print "Set-Cookie: $c\n";
}
# stimme zaehlen
count($vote);
$action = "Vielen Dank. Ihre Stimme wurde gezählt.";
show_result();
}
else
{
show_result();
}
sub count
{
....
my $cookiecheck = $cgi->cookie( -name => 'Cookie',
-value => 'Test');
Hier wird dem cookie ein Name und ein Wert zugewiesen, da musst du deine gewünschten Werte einbauen.
Struppi.
Hallo Struppi,
habe gerade ein wenig rumprobiert, da tut sich leider gar nichts. Woran macht das Script denn fest ob ein entsprechender Cookie gespeichert ist oder nicht?
mfg
Maui Muc
Hallo Maui Muc
Hallo Struppi,
habe gerade ein wenig rumprobiert, da tut sich leider gar nichts. Woran macht das Script denn fest ob ein entsprechender Cookie gespeichert ist oder nicht?
keine Ahnung ich seh aber gerade eine andere Zeile:
my $c = $cgi->cookie (
-name => "$cgipath umfrage",
-value => 'voted',
-expires => '+12M',
-path => "$cgipath",
);
Das ist der Cookie.
und hier wird es getestet:
if ($ENV{'HTTP_COOKIE'} =~ /umfrage=voted/)
Ist aber nicht sauber. den einerseits verwendet das Skript die Funktion CGI::cookie zum setzten, aber nicht zum lesen. Besser wäre es ein eindeutig benannten Cookie zu setzten, je nach Umfrage und diesem dann z.b. den Wert 'voted' geben.
Struppi.
Hi Struppi,
jetzt funktioniert es, vielen herzlichen dank, allein währe ich total aufgeschissen gewesen, da ich nicht die geringste Ahnung von Perl habe.
Was meinst du mit nicht ganz sauber? was empfiehlst du mir, sollte ich doch ein anderes Script verwenden? Mir gefällt es so gut da es so schön einfach ist, und jetzt auch genau das macht was ich will.
mfg
Maui Muc
Was meinst du mit nicht ganz sauber? was empfiehlst du mir, sollte ich doch ein anderes Script verwenden? Mir gefällt es so gut da es so schön einfach ist, und jetzt auch genau das macht was ich will.
Naja, wenn es jetzt für deine Zwecke funktioniert ist es ja gut. Es gibt sicher wesentlich schlechtere Skripte. Lediglich die Art wie das Skript die Werte des cookies prüft und an den Browser sendet könnte man verbessern, bzw. so ändern, dass das Skript flexibler wäre.
Struppi.