2010-08-19 4 views
2

Je souhaite empêcher l'accès à un site Web jusqu'à ce qu'un utilisateur accepte quelque chose. L'idée de base est qu'en haut de chaque page, il vérifie si le cookie existe, sinon quittez et incluez une page php qui contient le message et deux boutons un qui va créer le cookie et l'autre simplement les déplacer du site par exemple. google.comPHP créer un cookie et afficher uniquement le site Web si le cookie existe

EDIT:

C'est ce que j'ai fini avec:

L'avertissement incluent ressemblerait à quelque chose comme ceci:

<?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> 

et en haut des pages quelque chose comme ceci:

<?php 

    if(!isset($_COOKIE['agreed']) || ($_COOKIE['agreed'] != 'true')) 
    { 
     include('warning.php'); exit; 
    } 

?> 

Répondre

3

je voudrais si vous voulez le faire côté client ...

<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> 

et le chèque serait ...

if (
    !isset($_COOKIE['agreed'])|| 
    ($_COOKIE['agreed'] != 'true') 
) { 
    include('warning.php'); 
    exit; 
} 

pour régler le cookie sur le côté serveur, vous devez ...

<?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> 

voir setcookie() man page

+0

Aimez le PHP mais qu'en est-il de l'utilisation de PHP pour la partie cookie? Je ne veux pas utiliser JavaScript pour cela. Merci. – Cameron

+0

Lorsque je clique sur le bouton, le cookie est défini mais je vois toujours le formulaire et le message sauf si je rafraîchis la page qui est bizarre car elle est incluse dans la page et affiche donc sûrement qu'elle devrait se cacher sur un utilisateur cliquant sur le bouton sans le besoin d'une redirection? Quel serait le code pour la redirection de toute façon Si j'en ai besoin d'un? merci – Cameron

+0

a ajouté un exemple de redirection –

1

Utilisez Sessions à la place des cookies, car c Les ookies peuvent être désactivés par l'utilisateur. et sessions sont plus sûres que les cookies

à mettre en utilisation de la session:

session_start(); 
$_SESSION['session_exists'] = 1; 

et pour vérifier l'utilisation ceci:

if($_SESSION['session_exists'] != 1) { include('warning.php'); exit; } 

Si vous avez des problèmes me faire savoir que je vais modifier.

+0

sessions sont le plus souvent stockées dans les cookies, mais ... de toute façon, si tel était le cas - les cookies ont été désactivés - alors ils ne verront pas le site sauf s'ils ont activé les cookies. Donc, l'effet serait le même que de ne pas avoir le cookie/dire d'être en désaccord. – JAL

+0

Pouvez-vous me montrer comment faire ci-dessus en utilisant des sessions alors? Merci. Les sessions – Cameron

+0

utilisent des cookies pour stocker l'identifiant de session. si les cookies sont désactivés, la session peut seulement quand l'identifiant de session est ajouté à _every_ url ... rendant les sessions inutilisables –

1

Voici une méthode côté serveur.

Vous devez recharger la page après avoir défini le cookie pour qu'il prenne effet, d'où la redirection à l'aide de Location. C'est une bonne pratique pour les formulaires POST, de toute façon, d'utiliser HTTP 303 pour éviter le 'Souhaitez-vous resoumettre?' si l'utilisateur recharge la page.

<?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; } 

Voir PHP setcookie docs et le cookie main section. Les cookies sont accessibles à travers le '$ _COOKIE superglobal'.

1

je partirais avec quelque chose comme:

<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> 

Puis

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, '/'); 
} 

C.

Questions connexes