我希望在用户同意之前保护网站不被访问。基本的想法是,在每个页面的顶部,它将检查cookie是否存在,如果没有然后退出并包括一个包含该消息的php页面和两个按钮,一个将创建cookie,另一个只是将它们移出网站,例如google.com
编辑:
这就是我最终的结果:
警告包含如下所示:
<?php
function pageURL() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {
$pageURL .= "s";
}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
}
else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}
$pageRedirect = pageURL();
if (
isset($_POST['agree_button']) && ($_POST['agree_button'] == 'I agree')
) {
setcookie('agreed', 'true');
header("Location:$pageRedirect",303);
}
?>
<form action="<?php echo pageURL(); ?>" method="post">
<p>INSERT MESSAGE HERE (User must agree)</p>
<input type="submit" value="I agree" name="agree_button" />
<input type="button" value="I disagree" />
</form>
和页面顶部的内容如下:
<?php
if(!isset($_COOKIE['agreed']) || ($_COOKIE['agreed'] != 'true'))
{
include('warning.php'); exit;
}
?>
答案 0 :(得分:3)
我会做客户端......
<script src="js/jquery.cookie.js" type="text/javascript"></script>
<form>
<p>INSERT MESSAGE HERE (User must agree)</p>
<input type="submit" value="I agree" onclick="$.cookie('agreed', 'true'); location.href='/'" />
<input type="button" value="I disagree" />
</form>
并且检查将是......
if (
!isset($_COOKIE['agreed'])||
($_COOKIE['agreed'] != 'true')
) {
include('warning.php');
exit;
}
如果你想在服务器端设置cookie,你需要......
<?php
if (
isset($_POST['agree_button'])&&
($_POST['agree_button'] == 'I agree')
) {
setcookie('agreed', 'true');
header('Location: /'); // redirect to main page
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<p>INSERT MESSAGE HERE (User must agree)</p>
<input type="submit" value="I agree" name="agree_button" />
<input type="button" value="I disagree" />
</form>
答案 1 :(得分:1)
使用Sessions代替Cookie,因为用户可以禁用Cookie。 而且会话比Cookies更安全
设置会话使用:
session_start();
$_SESSION['session_exists'] = 1;
并检查使用此:
if($_SESSION['session_exists'] != 1) { include('warning.php'); exit; }
如果您有任何问题,请告诉我我会修改。
答案 2 :(得分:1)
这是服务器端方法。
您必须在设置cookie后重新加载页面才能使其生效 - 因此使用Location重定向。无论如何,对于POST表单,这是一个很好的做法,使用HTTP 303来避免“你想重新提交吗?”如果用户重新加载页面。
<?php
$redir=false;
if($_POST['agreed']){ setcookie('allow','yes',time()+3600); $redir=true;}
elseif($_POST['refused']) { setcookie('allow','no',time()+3600); $redir=true;}
if($redir){ header("Location: thispage.php",303); }
?>
<form method='post' action='thispage.php'>
<p>Do you agree to our voluminous and vast list of preconditions?</p>
<input type="submit" name='agreed' value="I agree" />
<input type="submit" name='refused' value="I disagree" />
</form>
<?php
if($_COOKIE['allow']=='no'){ echo 'Not authorized'; exit; }
elseif($_COOKIE['allow']=='yes'){ echo 'Welcome to my amazing site - thanks for bein$
else{ echo 'Please read our terms and select your choice to continue'; exit; }
请参阅PHP setcookie文档和cookie main section。 Cookie可以通过'$ _COOKIE superglobal'访问。
答案 3 :(得分:1)
我会选择类似的东西:
<form>
<p>INSERT MESSAGE HERE (User must agree)</p>
<input type="submit" name="conditional_access_agree" value="I agree" />
<input type="button" name="conditional_access_disagree" value="I disagree" />
</form>
然后
if(($_COOKIE['agreed'] != 'true')
&& ($_POST['conditional_access_agree'] != "I agree")) {
include('warning.php');
exit;
} elseif (($_COOKIE['agreed'] != 'true')
&& ($_POST['conditional_access_agree'] == "I agree")) {
setcookie('agreed', 'true', time()+60*60*24*30, '/');
}
下进行。