Hallo!
Ich habe mal ein bischen rumgefriemelt und bin fast fertig.
Im Moment sieht es so aus:
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
#!/usr/bin/perl -w
use strict;
use constant SESSION_TIME => 60000;
# my $session = ($uid * $uniq) * 7 . 'XY' . time() . 'XY' . $uniq . 'XY' . rand(1) . 'XY' . $uid;
my $session = "2.09799194335938e+015XY1067904570XY299713134765625XY0.469451904296875XY1";
my $time = 1067904570;
my $uniq = 2147483647;
my $rand = 0.469451904296875;
my $uid = 1;
my $rec_key = (split/XY/, $session)[0];
my $rec_time = (split/XY/, $session)[1];
my $rec_uniq = (split/XY/, $session)[2];
my $rec_rand = (split/XY/, $session)[3];
my $rec_uid = (split/XY/, $session)[4];
my $zwischen = $rec_uid * $rec_uniq * 7;
print "$session\n";
my $session_pattern = '.*XY\d{10}XY\d{15}XY\d{1}\.\d{14,15}XY.*';
if( $session =~ m/$session_pattern/ ){ #Muster ok?
print "ok1\n";
if( (split /XY/, $session)[1] > time() - SESSION_TIME ){ #gültig? (Zeit)
print "ok2\n";
if( (split/XY/, $session)[4] * (split/XY/, $session)[2] * 7 eq (split/XY/, $session)[0] ){ #valid? (user)
print "ok3\n"; #eq, da auch \D vorkommen können (+|e|.)
}
}
}
Das Problem ist nur, dass die Session bei dem Teil, wo ich eine Zufallszahl übergebe die mit rand(1) generiert wurde auch etwas anders aussehen kann.
So z.B.
Quote3.22549438476563e+015XY1067904937XY460784912109375XY0.76336669921875XY1
Da ist die Zufallszahl um eine Stelle kürzer.
Wie überprüfe ich denn nun darauf, ob die Zufallszahl 14 oder 15 Stellen lang ist?
Ich dachte, das würde mti dem Quantifier {14,15} gehen.
Geht aber nicht.
Hilfe!
mfg pktm