2013-03-25 91 views
1

我有一個年齡門建立在我的網站,讓17歲以下的用戶無法進入現場,但我想要的人,誰已經收藏特定的鏈接才能進入該鏈接經過年齡門後:HTTP推薦通過年齡門

這裏是我的年齡門代碼:

<?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文件或域/子目錄/ - 通過之後,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); 
+0

如果你只存儲在會話你的年齡門,它不會被瀏覽器會話之間持續存在(即如果他們重新啓動他們的瀏覽器)。您可能會考慮使用cookie或其他方式。 – jchapa 2013-03-25 18:02:01

回答

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 
} 

記住,這僅僅是一個可能的變化,但我建議不要依賴於用戶數據,如引用(某些瀏覽器擴展甚至明確取消設置/修改)。