Реферер HTTP через Age Gate

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

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

<?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);
}
?>

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

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

РЕДАКТИРОВАТЬ: ВОЗРАСТ Расчет на основе отправки формы -

$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);

person Keoki    schedule 25.03.2013    source источник
comment
Если вы сохраняете свой возрастной порог только в сеансе, он не будет сохраняться между сеансами браузера (т. е. если они перезапустят свой браузер). Вы, вероятно, захотите рассмотреть возможность использования файла cookie или других средств.   -  person jchapa    schedule 25.03.2013
comment
Мне не нужно, чтобы он был постоянным, и он должен очищаться после закрытия браузера или очистки кеша/куки. Я не запускаю сайт для взрослых или что-то в этом роде, просто небольшая проверка, так как я не собираю данные.   -  person Keoki    schedule 25.03.2013


Ответы (1)


Я бы настроил это наоборот: каждая страница установила переменную $_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
}

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

person mabi    schedule 05.01.2014