# Mini Session Module for guildmember.cgi
# ver 0.01(08/06/16)


#new_session
#新規セッションIDを作る
#引数はログインネームで、これをキーに作る。入っていない場合は0を返す。
#同一セッションIDがあった場合は無効、0を返す。
#セッションIDはYYMMDDHHMMSSログインネームで与える
#セッションIDにはセッション有効時間を設定
#記録データはセッションID、有効期限、IPアドレス
#
#check_session
#引数はセッションID
#セッションIDと記録IPを比較確認←これすると携帯アウト
#存在しない場合、引数がない場合は0を返す
#存在した場合は有効期限をチェック
#有効期限切れの場合は1を返す
#IPを確認
#IPが違う場合は2を返す。
#すべてクリアの場合はセッションIDを返すとともに有効期限の更新。
#同時に有効期限のチェックを行い期限切れのものはセッションリストから排除。ただし、エラー終了時は排除されない。



package gmr_ses;

sub new_session{

	my $time=time();
	my $filename='sessions.cgi';
	my @list=();
	my $name=$_[0];
	my $session_id="$time$name";
	my $expire_time=time+1800; #有効時間1800秒(30分)
	my $addr=$ENV{'REMOTE_ADDR'};
	my $r_session_id,$r_time,$r_ip;


	if($name eq ""){return(0);}

	open(IN,"$filename");
		@list=<IN>;
	close IN;

	#check session exist
	
	foreach $i(@list){
		($r_session_id,$r_time,$r_ip)=split(/\t/,$i);
		if($r_session_id eq $session_id){return(0);}
	}

	if(!open(OUT,">>$filename")){&header; &error_message('sesfile error/system','data file access failed.');}
		print OUT "$session_id\t$expire_time\t$addr\t\n";
	close OUT;
	return($session_id);
}

sub check_session{

	my $time=time();
	my $session_id=$_[0];
	my $filename='sessions.cgi';
	my @list=();
	my @out=();
	my $expire_time=time+1800; #有効時間1800秒(30分)
	my $addr=$ENV{'REMOTE_ADDR'};
	my $r_session_id,$r_time,$r_ip;
	my $match=0;

	if($session_id eq ""){return(0);}

	open(IN,"$filename");
		@list=<IN>;
	close IN;

	#check session exist
	
	foreach $i(@list){
		($r_session_id,$r_time,$r_ip)=split(/\t/,$i);
		if($r_session_id eq $session_id){
			$match=1;
			if($time >$r_time){return(1);}
#			if($addr ne $r_ip){return(2);}
			$i="$r_session_id\t$expire_time\t$addr\t\n";
			$r_time=$expire_time;
		}
		if($time <$r_time){
			push(@out,$i);
		}
	}
	
	if($match==0){return(0);}
	
	if(!open(OUT,">$filename")){&header; &error_message('sesfile error/system','data file access failed.');}
		print OUT @out;
	close OUT;
	return($session_id);

}


1;
