2013-03-25 3 views
1

У меня есть возрастная установка, установленная на моем сайте, так что пользователи до 17 лет не могут войти на сайт, но я хочу, чтобы люди, у которых была закладка определенной ссылки, могли перейти по этой ссылке после прохождения через возрастной порог:HTTP Referrer через Age Gate

Вот мой возраст код ворота:

<?php 
session_start(); 

if(isset($_SESSION['legal'])) { # Check to see if session has already been set 
$url = ($_SESSION['legal'] == 'yes') ? 'index.php' : 'message.php'; 
header ('Location: ' .$url); 
} 

// If visitor hasn't gone through the age gate - Age Gate function and Set Session// 
if(isset($_POST['checkage'])) { 
$day = ctype_digit($_POST['day']) ? $_POST['day'] : ''; 
$month = ctype_digit($_POST['month']) ? $_POST['month'] : ''; 
$year = ctype_digit($_POST['year']) ? $_POST['year'] : ''; 

$birthstamp = mktime(0, 0, 0, $month, $day, $year); 
$diff = time() - $birthstamp; 
$age_years = floor($diff/31556926); 
if($age_years >= 18) { 
$_SESSION['legal'] = 'yes'; 

$url = 'index.php'; 
} else { 
$_SESSION['legal'] = 'no'; 

// If failed the Age Gate go to specific page 
$url = 'message.php'; 
} 
header ('Location: ' .$url); 
} 
?> 

что я могу добавить к этому коду, так что если бы я хотел пойти в домен/page.php или подкаталог/домена/- Возрастные ворота приведут меня туда после того, как я его пройду? (Я знаю, что мне нужно использовать HTTP Referrer, но я не могу понять, как его включить).

Редактировать Добавить: Я знаю, что иногда браузеры не будут хранить/отправлять HTTP-реферер, поэтому мне нужно решение для тех, кто не передает это значение.

EDIT: AGE Расчет основан на представлении формы -

$day = ctype_digit($_POST['day']) ? $_POST['day'] : ''; 
$month = ctype_digit($_POST['month']) ? $_POST['month'] : ''; 
$year = ctype_digit($_POST['year']) ? $_POST['year'] : ''; 

$birthstamp = mktime(0, 0, 0, $month, $day, $year); 
$diff = time() - $birthstamp; 
$age_years = floor($diff/31556926); 
+0

Если вы сохраняете свои возрастные ворота в сеансе, это не будет сохраняться между сеансами браузера (например, если они перезапускают браузер). Вы, вероятно, захотите рассмотреть использование файла cookie или других средств. – jchapa

+0

Мне не нужно, чтобы он был постоянным, и он должен очищаться после закрытия браузера, или кто-то очищает их кеш/файлы cookie. Я не бегаю и взрослый сайт или что-то еще, просто небольшая проверка, так как я не собираю данные. – Keoki

ответ

0

Я Расстановка это наоборот: у каждой страницы установить $_SESSION переменные, чтобы указать, куда идти:

if (!isset($_SESSION['legal']) || $_SESSION['legal'] == 'no') { 
    $_SESSION['target'] = $_SERVER['PHP_SELF']; 
    header('Location: message.php'); 
    return; 
} 
// continue script execution... 

А в вашем message.php:

$isLegal = check_age(); // your age checking logic 
if ($isLegal && isset($_SESSION['target'])) { 
    header('Location: ' . $_SESSION['target']); 
} else if ($isLegal) { 
    header('Location: index.php'); 
} else { 
    // setup message.php with a validation failed message 
} 

Mind, это только один из возможные варианты, но я бы посоветовал не полагаться на данные пользователя, такие как реферер (некоторые расширения браузера даже явно отключили/модифицировали это).

Смежные вопросы