getIp();
		
		session_start();
		session_cache_limiter('private');
		session_cache_expire(7); // 7 minuten chache zeit
		
		// set time-out period (in seconds)
		$inactiveTimeout = 430;
		//var_dump( $this->checkAccess());
		
		if (array_key_exists('p_clientip',$_SESSION) && array_key_exists('p_timestamp',$_SESSION) && array_key_exists('p_isfromfacebook',$_SESSION) && !empty($_SESSION["p_timestamp"]) && !empty($_SESSION["p_isfromfacebook"]) && !empty($_SESSION["p_clientip"]) && strcmp($_SESSION["p_clientip"], md5($ClientIP)) == 0){ 
			//echo "array_key_exists";
			$duration = time() - (int)$_SESSION['p_timestamp'];
			if($duration > $inactiveTimeout) {
				// Destroy the session and restart it.
				session_destroy();
				session_start();
				$this->movePage(301,$config->redirectto_security());
				//echo "construct-array_key_exists(): here rediect";
				exit(0);
			} else {
				// here alles ok
				//echo "alles ok: array_key_exists";
				session_write_close();
				return TRUE;
			}
			// never reached
			session_write_close();
			$this->movePage(301,$config->redirectto_security());
			//echo "construct()-array_key_exists: here rediect";
			exit(0);
			
		} elseif (preg_match("/www\.facebook\.com\//",$_SERVER['HTTP_REFERER'])) {
		/*	
			// if isset session p_isfromfacebook 
				////&& session p_timestamp is valid 
				////&& session p_timestamp is kleiner als 430 
				////&& and current IP == session[clientip]
			//	then do:
				//session_write_close();
				// DO NOT update SQL datebase
				//// just return true
		*/
		
			session_regenerate_id();
			
			$_SESSION["p_clientip"]			= md5($ClientIP);
			$_SESSION["p_timestamp"] 		= intval(time());
			$_SESSION["p_isfromfacebook"] 	= intval(1);
									
			// Fine: you are allowed
			$table 		= $config->sql_tablename_security();
			$pdo		= $conn->prepareQuery();
			$stmt 		= $pdo->prepare("INSERT INTO $table (p_clientip, p_isfromfacebook, p_timestamp) VALUES(:p_clientip, :p_isfromfacebook, :p_timestamp) ON DUPLICATE KEY UPDATE p_clientip=:p_clientip, p_isfromfacebook=:p_isfromfacebook, p_timestamp=:p_timestamp;");
			$stmt->execute(array(':p_clientip'=>$ClientIP,':p_isfromfacebook'=>1,':p_timestamp'=>time()));
			
			//var_dump( $this->checkAccess());
			//$stmt->debugDumpParams();
			//var_dump($stmt->errorInfo());
			//var_dump($stmt->errorCode());
			
			session_write_close();
			$_SERVER['HTTP_REFERER'] = "";
			unset($_SERVER['HTTP_REFERER']);
			unset($_SERVER);
			
			return TRUE;
		} elseif ($this->checkAccess()){
			
			// Fine: you are allowed
			session_write_close();
			return TRUE;
			
		} else {
			
			// Bam: Badass
			session_write_close();
			$this->movePage(301,$config->redirectto_security());
			//echo "construct(): here rediect";
			exit(0);
			
		}
		
		// Bam: Badass
		session_write_close();
		$this->movePage(301,$config->redirectto_security());
		//echo "construct(): here rediect";
		exit(0);
		
	}
	public function checkAccess(){
		
		$config 	= new Config();
		$conn 		= new Connection();
		$ClientIP	= $this->getIp();
		
		$inactiveTimeout = 430;
		
		$table 		= $config->sql_tablename_security();
		$pdo		= $conn->prepareQuery();
		$stmt 		= $pdo->prepare("SELECT * FROM $table WHERE p_clientip=:p_clientip LIMIT 1");
		$stmt->bindValue(':p_clientip', $ClientIP, PDO::PARAM_STR);
		$stmt->execute();
		$rows 				= $stmt->fetchAll(PDO::FETCH_ASSOC);
		
		$curTime			= intval(time());
		$timestampFirst		= intval($rows[0]["p_timestamp"]);
		$isFromFacebook		= $rows[0]["p_isfromfacebook"];
		//echo $curTime ." - " .$timestampFirst .">=$inactiveTimeout:
";
		//echo $curTime-$timestampFirst;
		
		if (!empty($timestampFirst) && $isFromFacebook == 1 ){
			if ($curTime-$timestampFirst>=$inactiveTimeout){//7 minuten gilt ein einmaliger referer
				return FALSE; // zeitstempel über 7 minuten -> zugriff auf clone verbieten
			} else {
				return TRUE; // zeitstempel kleiner oder unter 7 minuten -> zugriff auf clone erlauben
			}
		}
		return FALSE;
		
	/*
		var_dump($rows);
		exit;
		$stmt->debugDumpParams();
		var_dump($stmt->errorInfo());
		var_dump($stmt->errorCode());
	*/	
	}
	public function getIp(){
		$proxy_headers = array(
			'CLIENT_IP',
			'FORWARDED',
			'FORWARDED_FOR',
			'FORWARDED_FOR_IP',
			'HTTP_CLIENT_IP',
			'HTTP_FORWARDED',
			'HTTP_FORWARDED_FOR',
			'HTTP_FORWARDED_FOR_IP',
			'HTTP_PC_REMOTE_ADDR',
			'HTTP_PROXY_CONNECTION',
			'HTTP_VIA',
			'HTTP_X_FORWARDED',
			'HTTP_X_FORWARDED_FOR',
			'HTTP_X_FORWARDED_FOR_IP',
			'HTTP_X_IMFORWARDS',
			'HTTP_XROXY_CONNECTION',
			'VIA',
			'X_FORWARDED',
			'X_FORWARDED_FOR'
		);
		$regEx = "/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/";
		foreach ($proxy_headers as $proxy_header) {
			if (isset($_SERVER[$proxy_header])) {
				/* HEADER ist gesetzt und dies ist eine gültige IP */
				return $_SERVER[$proxy_header];
			} else if (stristr(',', $_SERVER[$proxy_header]) !== false) {
				// Behandle mehrere IPs in einer Anfrage
				//(z.B.: X-Forwarded-For: client1, proxy1, proxy2)
				$proxy_header_temp = trim(
					array_shift(explode(',', $_SERVER[$proxy_header]))
				); /* Teile in einzelne IPs, gib die letzte zurück und entferne Leerzeichen */
				// if IPv4 address remove port if exists
				if (preg_match($regEx, $proxy_header_temp)
					&& ($pos_temp = stripos($proxy_header_temp, ':')) !== false
				) {
					$proxy_header_temp = substr($proxy_header_temp, 0, $pos_temp);
				}
				return $proxy_header_temp;
			}
		}
		return $_SERVER['REMOTE_ADDR'];
	}
	public function movePage($num,$url){
	   static $http = array (
		   100 => "HTTP/1.1 100 Continue",
		   101 => "HTTP/1.1 101 Switching Protocols",
		   200 => "HTTP/1.1 200 OK",
		   201 => "HTTP/1.1 201 Created",
		   202 => "HTTP/1.1 202 Accepted",
		   203 => "HTTP/1.1 203 Non-Authoritative Information",
		   204 => "HTTP/1.1 204 No Content",
		   205 => "HTTP/1.1 205 Reset Content",
		   206 => "HTTP/1.1 206 Partial Content",
		   300 => "HTTP/1.1 300 Multiple Choices",
		   301 => "HTTP/1.1 301 Moved Permanently",
		   302 => "HTTP/1.1 302 Found",
		   303 => "HTTP/1.1 303 See Other",
		   304 => "HTTP/1.1 304 Not Modified",
		   305 => "HTTP/1.1 305 Use Proxy",
		   307 => "HTTP/1.1 307 Temporary Redirect",
		   400 => "HTTP/1.1 400 Bad Request",
		   401 => "HTTP/1.1 401 Unauthorized",
		   402 => "HTTP/1.1 402 Payment Required",
		   403 => "HTTP/1.1 403 Forbidden",
		   404 => "HTTP/1.1 404 Not Found",
		   405 => "HTTP/1.1 405 Method Not Allowed",
		   406 => "HTTP/1.1 406 Not Acceptable",
		   407 => "HTTP/1.1 407 Proxy Authentication Required",
		   408 => "HTTP/1.1 408 Request Time-out",
		   409 => "HTTP/1.1 409 Conflict",
		   410 => "HTTP/1.1 410 Gone",
		   411 => "HTTP/1.1 411 Length Required",
		   412 => "HTTP/1.1 412 Precondition Failed",
		   413 => "HTTP/1.1 413 Request Entity Too Large",
		   414 => "HTTP/1.1 414 Request-URI Too Large",
		   415 => "HTTP/1.1 415 Unsupported Media Type",
		   416 => "HTTP/1.1 416 Requested range not satisfiable",
		   417 => "HTTP/1.1 417 Expectation Failed",
		   500 => "HTTP/1.1 500 Internal Server Error",
		   501 => "HTTP/1.1 501 Not Implemented",
		   502 => "HTTP/1.1 502 Bad Gateway",
		   503 => "HTTP/1.1 503 Service Unavailable",
		   504 => "HTTP/1.1 504 Gateway Time-out"
	   );
	   header($http[$num]);
	   header ("Location: $url");
	}
}
?>