Я был в шоке, проверяя возрастную проверку, и мне интересно, что сейчас лучше. Это не должно быть надежным, мой первоначальный план – использование jquery.
Я нашел этот ресурс, http://www.techerator.com/2010/09/how-to-perform-age-verification-with-jquery-and-cookies-mmm-cookies/
Для удобства использования я вставил метод здесь:
Используется на страницах, требующих проверки
if ($.cookie('is_legal') == "yes") { //legal! } else { document.location = "http://www.domain.com/[pathtofile]/verify.php?redirect=http://<?php echo $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; ?>"; }
Страница подтверждения
$('#accept-btn').click(function(){ $.cookie('is_legal', 'yes', { expires: 1, path: '/', domain: 'domain.com' }); <?php if ( !isset($_REQUEST['redirect']) || $_REQUEST['redirect'] == "" ) { ?> document.location = "http://www.domain.com"; <?php }else{ ?> document.location = "<?php echo $_REQUEST['redirect']; ?>"; <?php } ?> });
вот его часть html.
<p>Are you OVER 18</p> <div id="accept-btn">YES</div> <div id="noaccept-btn"> NO</div >
Первая проблема заключается в том, что инструкция else не работает, и, похоже, она использует одну и ту же переменную для перенаправления для опции YES и опции NO.
ТАК, мне любопытно, только для того, чтобы узнать, почему это работает неправильно и как исправить, а во-вторых, что действительно лучше. Как я сказал, seo / php или надежный способ не критичен.
Мой желаемый результат состоит в том, что, когда они получают доступ к любой странице сайта, они получают опцию «да» или «нет», а затем, когда «ДА» получают доступ к странице, если они выбрали «нет», это перенаправление.
Как насчет чистой версии PHP этого?
<?php /** * @author - Sephedo * @for - Deedub @ Stackoverflow * @question - http://stackoverflow.com/questions/18751788/age-verification */ $min_age = 18; // Set the min age in years if( isset( $_POST['submit'] ) ) { if( mktime(0, 0, 0, $_POST['month'], $_POST['day'], $_POST['year'] ) < mktime(0, 0, 0, date('m'), date('j'), ( date('Y') - $min_age ) ) ) { var_dump("over $min_age"); } else { var_dump("under $min_age"); } } ?> <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>
Новая версия по запросу в комментариях
<?php /** * @author - Sephedo * @for - Deedub @ Stackoverflow * @question - http://stackoverflow.com/questions/18751788/age-verification */ // ADD TO ALL PAGES WHICH NEED TO HAVE AGE VERIFICATION 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'; ?> <?php /** * @author - Sephedo * @for - Deedub @ Stackoverflow * @question - http://stackoverflow.com/questions/18751788/age-verification */ // checkage.php session_start(); // checkage.php if( isset( $_POST['yes'] ) ) { $_SESSION['age_verification'] = true; if( isset( $_GET['url'] ) ) { die( header('Location: ' . $_GET['url'] ) ); } else { die( header('Location: index.php') ); } } elseif( isset( $_POST['no'] ) ) { $_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>Are you over 18?</legend> <input type="submit" name="yes" value="Yes" /> <input type="submit" name="no" value="No" /> </fieldset> </form>