CGI Session wird jedes mal neu erstellt

ghostadmin

Grand Admiral Special
Mitglied seit
11.11.2001
Beiträge
25.208
Renomée
189
Standort
Dahoam Studios
Ich habe hier ein Problem in Perl das jedes Mal eine neue Session angelegt wird, wenn ich ein Script im Browser starte.

Das hier soll eigentlich nur eine Session anlegen wenn kein Cookie gesetzt ist:

Code:
my @storedcookie = $cgi->cookie($ip); #get content of cookie
my $sid = $storedcookie[0] || undef; #get first value from cookie which is sessionid
my $session = CGI::Session->new("id:md5", $sid, {Directory=>'/tmp'}); #makes only new session when $sid is undef

Starte ich die Seite zum ersten Mal wird ein Session File korrekt unter /tmp angelegt. Melde ich mich dann an (das Script stellt eine Anmeldeseite im Browser dar) und es wird ein Cookie gesetzt, wird aber ein zweites Session File angelegt obwohl das Cookie einwandfrei funktioniert! Startet man die Seite zum dritten Mal wird aber kein weiteres File angelegt.

Und was auch nicht so toll ist, wenn man nicht angemeldet und kein Cookie gesetzt ist, dann wird für jeden Seitenaufruf immer wieder ein neues Session File erzeugt.

So wird das Cookie erzeugt:

Code:
my $cookie = $cgi->cookie(-name => $ip,
					-value => [$session->id, $extension ],
					-path => '/');
					
print $cgi->header(-cookie => $cookie);

Löschen vom Cookie geht auch (einfach expire in die Vergangenheit setzen). Wie könnte ich das mit den Sessions optimieren? Was stört ist, das da massenweise sessionfiles angelegt werden.
Es gibt zwar Web Frameworks wie Dancer oder Mojolicious aber da müsste ich den gesamten Content umschreiben.

Hier das vollständige Anmeldescript:
http://pastebin.com/tX4sd81C
 
Zuletzt bearbeitet:
Also ich habe die Doku gerade mal überflogen, und was mich wundert ist, warum Du da Sessions und Cookies vermischt? Sollte die Session-Klasse die Cookies, für die Erkennung ob eine Session fortgesetzt wird, im Normalfall nicht selber verwalten? Ansonsten fällt mir im Moment die Möglichkeit ein, dass "$cgi->cookie()" vielleicht gar keinen Array zurück liefert (die Standard-Doku scheint was Rückgabewerte angeht recht schwach zu sein)?
 
Ja das stimmt vermutlich das ich gar keine Cookies brauche, während der Sitzung soll nur ein bestimmter Wert gespeichert werden und von anderen Scripts aus abrufbar sein.

Ich dachte nur ursprünglich wenn sich ein anderer User nachher anmeldet würde das mit den Sessions durcheinander geraten.

In storedcookie[0] steht die SessionID schon korrekt drin und nachdem ich angemeldet bin, geht auch alles.

Vielleicht lasse ich das mit den Cookie mal weg und das funktioniert dann. Aber interessieren würde mich schon warum die Session doppelt angelegt wird bevor man angemeldet ist.
 
Zurück
Oben Unten