Hallo!
Ich habe eine Session für ein OnlineGame, die ich im Query-String (CGI) übergeben
Die sieht so aus:
print $query->{sid}; # 86674281529017.9XY1066938111XY606719970703125XY0.535980224609375XY1
und wird so gebaut:
# Session erstellen
my $session = ($uid * $uniq) / 7 . 'XY' . time() . 'XY' . $uniq . 'XY' . rand(1) . 'XY' . $uid;
$uid und $uniq werden dabei aus einer Datenbank gelesen und bedeuten so viel wie User-ID und Unique-ID.
$uid besteht aus einer beliebigen Zahl (in der Datenbank als int(255) eingetragen) und $uniq ist eine 14-stellige Zufallszahl aus rand(1), wobei die 0. am Anfang weggelassen wurden.
Jetzt würde ich gerne im nächsten Schritt überprüfen, ob die Session gültig ist.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sub validate_session{
# ---- usage
# if( validate_session( $sessionDataToValidate ) ){ print "Session Ok!\n"; }
# ----
# prüfen, ob gültige sid: a)muster b)haltbarkeit c)valid
# my $session = ($uid * $uniq) / 7 . 'XY' . time() . 'XY' . $uniq . 'XY' . rand(1) . 'XY' . $uid;
my $session = @_;
my $return = 0;
if( $session =~ m/\[d{16}\.]XY\d{10}XY\d{15}\[d{15}\.]XY\d*/ ){ #Muster ok?
if( (split /XY/, $session)[1] > time() - SESSION_TIME ){ #gültig? (Zeit)
if( ((split /XY/, $session)[0] * 7) / (split /XY/, $session)[-1] == (split /XY/, $session)[-3] ){ #valid? (user)
$return = 1;
}
}
}
return $return;
}
Was ich schon durch auskommentieren der einzelnen Zeilen herausbekommen habe ist, dass in jeder Abfrage ein Fehler steckt - *freu*
So, kann mir wer bei dieser Aufgabe helfen?
mfg pktm
PS: ich habe übrigens extra zur Entwicklung 3 if's gewählt, zusammenfügen kann man es hinterher ja immernoch.