PHP年龄检查 - 拦截和重定向

时间:2014-03-21 14:20:33

标签: php redirect

我正在开发一个网站,其中涉及一些有关酒精的信息,并且客户已要求进行年龄检查以访问此页面。我知道他们是多么无用,但我认为这有一些规定。

经过一番研究后,我发现PHP是进行年龄检查的更好方法,因为禁用javascript会使基于JS的检查变得无用。但是我的PHP知识并不是很好。我在这里找到了一个答案,它指出了我正确的方向:Age Verification

现在问题是,它无法正常工作。

该过程的工作原理如下:

  • 用户访问brands.php页面。 PHP检查年龄验证会话数据,如果检查尚未完成,则重定向到checkage.php:

    <?php 
    include_once("includes/header.php");
    
    session_start();
    
    if(!isset( $_SESSION['age_verification'] ) or $_SESSION['age_verification'] != true )   die( header("Location: checkage.php?url=http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]") );
    
    //session_destroy(); // uncomment to reset for testing and debugging.
    
    echo 'hello over 18 person';
    
    ?>
    
  • checkage.php包含检查年龄的表格(不可预测)。我将作者在该主题上的两个答案结合起来,使我认为应该起作用。我放置了一个if语句来获取品牌页面的网址,并在年龄合适时重定向到那里,否则重定向到主页。该页面的代码如下:

    <?php
    
    $min_age = 18; // Set the min age in years
    
    if( isset( $_POST['submit'] ) )
    {
    $_SESSION['age_verification'] = true;
    
        if( mktime(0, 0, 0, $_POST['month'], $_POST['day'], $_POST['year'] ) < mktime(0, 0, 0, date('m'), date('j'), ( date('Y') - $min_age ) ) )
        {
            if( isset( $_GET['url'] ) )
            {
                header('Location: ' . $_GET['url'] ); 
            } 
        }
        else
        {
            header('Location: index.php');
        }
    }
    else 
    {
    $_SESSION['age_verification'] = false;
    }
    
    // The below line will check if someone has already said no so you can show them a page which tells them to they are too young.
    //if( isset( $_SESSION['age_verification'] ) and $_SESSION['age_verification'] != true ) die( header('Location: tooyoung.php') );
    
    ?>
    
    <form method="POST" >
        <fieldset>
            <legend>Enter your age</legend>
            <label for="day" >Day:</label>
            <select name="day" >
            <?php
            for( $x=1; $x <= 31; $x++ )
            {
                if( $x == date("j" ) ) echo "<option selected>$x</option>"; else echo "  <option>$x</option>";
            }
            ?>
            </select>
    
            <label for="day" >Month:</label>
            <select name="month" >
            <?php
            for( $x=1; $x<=12; $x++ )
            {
            if( $x == date("m" ) ) echo "<option selected>$x</option>"; else echo "<option>$x</option>";
            }
            ?>
            </select>
    
            <label for="day" >Year:</label>
            <select name="year" >
            <?php
            for( $x=date("Y"); $x>=(date("Y")-100); $x-- )
            {
                echo "<option>$x</option>";
            } 
            ?>
            </select>
    
            <input type="submit" name="submit" />
        </fieldset>
    </form>
    

此过程正是我想要发生的事情:拦截尝试访问该页面的用户&gt;重定向到年龄检查&gt;根据输入转到页面或回到家。我只是不知道它有什么问题。

很抱歉这个问题很长,试图尽可能清楚。任何帮助真的很感激!虽然我希望我做的事情非常明显和愚蠢......

1 个答案:

答案 0 :(得分:0)

你错过了session_start()

<?php
session_start();
//you missed above line!
$min_age = 18; // Set the min age in years

if( isset( $_POST['submit'] ) )
{
$_SESSION['age_verification'] = true;

    if( mktime(0, 0, 0, $_POST['month'], $_POST['day'], $_POST['year'] ) < mktime(0, 0, 0, date('m'), date('j'), ( date('Y') - $min_age ) ) )
    {
        if( isset( $_GET['url'] ) )
        {
            header('Location: ' . $_GET['url'] ); 
        } 
    }
    else
    {
        header('Location: index.php');
    }
}