通过Age Gate的HTTP推荐人

时间:2013-03-25 17:59:42

标签: php http-referer

我的网站上设置了年龄门,因此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);
}
?>

我可以添加到此代码中,以便如果我想转到domain / page.php或domain /子目录/ - Age Gate会在我通过之后带我去那里吗? (我知道我必须使用HTTP Referrer,但我无法弄清楚如何包含它。)

编辑添加:我知道有时浏览器不会保留/发送HTTP Referrer,因此我需要一个解决方案,以便那些没有传递该值的人。

编辑: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);

1 个答案:

答案 0 :(得分: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
}

请注意,这只是可能的变体之一,但我建议不要依赖于用户数据,例如引荐来源(某些浏览器扩展甚至明确取消/修改)。