Minimum wäre an dieser Stelle sowas wie MD5 -
tut er doch?
- Die Zufälligkeit der Funktion makeSID wäre auch erst mal anzuzweifeln. Da stecken mir zu viele Informationen drin, die keinesfalls zufällig sind: Zeit in Sekunden, Prozess-ID, und eine "Auswahl" an Textzeichen, die aus irgendeinem Grund in ihrer Zeichenvielfalt eingeschränkt wurden.
- Warum wird kein Session-Framework aus CPAN benutzt? CPAN ist doch der Stolz der Perl-Community, weil da die Perlen der beliebig erweiterbaren Perl-Funktionalität gespeichert sind. Mit Apache::Session und CGI::Session stehen zwei Pakete bereit, die ausreichend hohe Versionsnummern haben und sich irgendwie anbieten.
Die Standardvariante von CGI::Session arbeitet ähnlich dem von Rolf gezeigten Beispiel, es verwendet statt eines Zufallszeichenkette halt eine Zufallszahl.
sub generate_id {
my $self = shift;
my $md5 = new Digest::MD5();
$md5->add($$ , time() , rand(9999) );
return $md5->hexdigest();
}
Wobei ich hier noch statt time() auf Sekundenbasis, mit dem time von dem Modul HiRes::Time auf Millisekunden arbeiten würde. Das dürfte für eine Session ID ausreichen, zumal diese ja gar keine Information enthält, die es zu entschlüsseln gäbe.
Der Hinweis auf die Module bei CPAN ist sicher richtig, aber in einem Artikel, der die Technik beschreiben soll, bringt das ja nicht viel.
Struppi.