1 2 3 4 5 6 7 8
sub createSession{ my ($userId) = @_; $appSession = CGI::Session->new(); $appSession->param(-name=>'userId', -value=>$userId); $appSession->param(-name=>'userHash', -value=>$appSession->id()); $appSession->expire("userId", &getSessionExpireTime); return $appSession->id(); }
1 2 3 4 5 6
sub checkSessionId { my ($userId, $sessionId) = @_; $appSession = CGI::Session->load($sessionId) or &errHandler::error(CGI::Session->errstr()); if ($appSession && ($userId == $appSession->param('userId'))) {return 1} return 0; }
CGI::Session->load($sessionId)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
#!/usr/bin/perl use strict; use warnings; use CGI; use CGI::Cookie; use Digest::MD5 qw(md5_hex); # ein paar Variablen my $cookiename = 'SCHERZKEKS'; my %cookies = fetch CGI::Cookie; my $sid = undef; my $nocookie = undef; # nehme die SID aus dem gesendeten Cookie if(defined $cookies{$cookiename}){ $sid = $cookies{$cookiename}->value; # hier sollte noch geprüft werden, ob die SID # den Anforderungen genügt } else{ # erzeuge eine neue SID $sid = _makeSID(); $nocookie = "Kein Cookie vom UA bekommen\n"; } # Response if(defined $nocookie){ my $cookie = new CGI::Cookie( -name => $cookiename, -value => $sid, -path => '/', ); print "Set-Cookie: $cookie\n" ; } print "Content-Type: text/plain\n\n"; print "SID: $sid\n"; print $nocookie if $nocookie; exit; ########################################################################### # SessionID erzeugen sub _makeSID{ my @chars = ('A' .. 'Z', 'a' .. 'z', 0 .. 9, '+', '-'); my $len = scalar @chars; my $id .= time(); $id .= $$; for(my $i = 0; $i < $len; $i++){ $id .= $chars[int(rand($len))]; } $id = substr($id, 0, $len); $id = md5_hex($id); return $id; }
2012-03-15T10:27:17 GwenDragonSessionId nicht als Parameter in der Url mit.
2012-03-15T10:27:17 GwenDragonDein Beispiel führt ja den SessionId nicht als Parameter in der Url mit.
2012-03-18T04:01:55 biancaHabe dazu mal eine Frage: Wie löst du das, wenn ein Benutzer sich zweimal anmelden darf und will? Dann übermittelt das Cookie ja zwei Sessions und das Programm weiß nicht, in welcher der User gerade geklickt hat.
Deshalb übergebe ich meistens auch noch per Post die Session.
Gibt es da schönere Lösungen?
1 2 3 4 5
SID => { # Session-ID, Schlüssel für den Login-Eintrag user => '', # Benutzername level => '', # Benutzergruppe, bei mir ein numerischer wert ts => '', # Zeitstempel }
2012-03-18T08:30:13 biancaBei meiner Frage hatte ich vergessen zu sagen, dass ein und derselbe Benutzer sich zweimal anmelden darf und in beiden Anmeldungen unterschiedliche Berechtigungen hat. Er hat also zwei verschiedene ID's. Wie löst du das dann?
2012-03-18T09:53:56 biancaDie Frage bezog sich darauf, wie deine Scripte unterscheiden, welcher Benutzer da jetzt gerade kommt.
Wenn dieselbe Person unter mehreren Benutzern angemeldet ist liefert doch das Cookie alle Sessions. Wie unterscheidet das Script das?