-
Notifications
You must be signed in to change notification settings - Fork 0
/
login_check.pm
47 lines (39 loc) · 1.11 KB
/
login_check.pm
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
#!/usr/bin/perl
use strict;
use warnings;
use Time::Piece;
use Time::Piece::MySQL;
use Time::Piece::Over24;
=pod
#0 reset , 1 no change, already access ,2 bonus up ,9 illegular ,undef illegular
my $rtn = &login_check(
last_login=>$last_login_time,
time_shift=>$time_shift, #optional,default 0
login_span=>$span, #optional,default 86400 = one day
now=>$t, #optional,default localtime()
);
=cut
sub login_check {
my $atr = {@_};
my $now = $atr->{now} || localtime();
my $login_span = $atr->{login_span} || 86400;
my $time_shift = $atr->{time_shift} || 0;
my $continu_ok_start = $atr->{last_login} + 86400 - $time_shift;
$continu_ok_start = $now->from_mysql_datetime(
$continu_ok_start->strftime('%Y-%m-%d 00:00:00')
);
my $continu_ok_end = $continu_ok_start + $login_span - 1;
$now -= $time_shift;
my $rtn = undef;
if ($now > $continu_ok_end) {#連続していい時間が過ぎている
$rtn = 0;
} elsif ($now < $continu_ok_start) {#アクセス済み
$rtn = 1;
} elsif ($now->is_during($continu_ok_start,$continu_ok_end)) { #ログインok
$rtn = 2;
} else {
$rtn = 9;
}
return $rtn;
};
1;