Настройка cookie для управления контентом с помощью PHP - PullRequest
0 голосов
/ 27 июня 2018

Я использую cookie для отображения предупреждения о конфиденциальности в верхней части веб-страницы и по какой-то причине работает только при втором нажатии кнопки, а не при первом.

Кто-нибудь может понять, почему это происходит?

Для теста установлено 10 секунд.

Спасибо

John

    <?php

       echo "Cookie: ".$_COOKIE['privacy_warning'];

       if (isset($_POST['privacy_button'])) {

       setcookie('privacy_warning', true,  time()+10); // 10 seconds

       }

       if (!isset($_COOKIE['privacy_warning'])):

?>

    <p class="text-center alt">We use cookies to make interactions with our websites and services easy and meaningful, to better understand how they are used and to tailor advertising. You can read more and make your cookie choices <a href="../privacy/" style="color:white;"><u>here</u></a>. By continuing to use this site you are giving us your consent to do this.<br></p>
    <form action="index.php" method="post" >
       <div class="row">
          <div class="text-center large-12 columns">
             <button class="button tiny success" type="submit" name="privacy_button">ACCEPT</button>
          </div>
       </div>
    </form>

    <?php

       endif;

    ?>

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

ваш код был в порядке я запускаю ниже код, и он работал нормально:

<?php

echo "Cookie: ".$_COOKIE['privacy_warning'] . " done \n";
setcookie('privacy_warning', 'ohuuuum',  time()+10);


if (!isset($_COOKIE['privacy_warning'])):

    ?>

    <p class="text-center alt">We use cookies to make interactions with our websites and services easy and meaningful, to better understand how they are used and to tailor advertising. You can read more and make your cookie choices <a href="../privacy/" style="color:white;"><u>here</u></a>. By continuing to use this site you are giving us your consent to do this.<br></p>
    <form action="index.php" method="post" >
        <div class="row">
            <div class="text-center large-12 columns">
                <button class="button tiny success" type="submit" name="privacy_button">ACCEPT</button>
            </div>
        </div>
    </form>

<?php

endif;

?>

я запускал этот код, когда он запускал мой cookie установлен на "ohuuuum" и когда я перезагружал страницу, результат был ===> Cookie: ohuuuum done

0 голосов
/ 27 июня 2018

На самом деле, это не проблема, это способ работы файлов cookie.

Cookies устанавливаются с помощью HTTP-заголовка Set-Cookie, отправляемого в HTTP. ответ от веб-сервера.

https://en.wikipedia.org/wiki/HTTP_cookie#Implementation

Допустим, вы вызываете index.php и устанавливаете там cookie, почему он не доступен в том же PHP-скрипте? Так как сервер отправляет заголовок и тело сразу, поэтому нет «эй, сначала пошли этот заголовок куки, а затем делай другие вещи». Файл cookie получен клиентом после завершения сценария PHP и отправки его заголовка + тела.

Чтобы решить вашу проблему, вы можете сделать это так:

        <?php

       echo "Cookie: ".$_COOKIE['privacy_warning'];

       $privacy_warning = false;

       if (isset($_POST['privacy_button'])) {

       setcookie('privacy_warning', true,  time()+10); // 10 seconds
       $privacy_warning = true;

       }

       if (!privacy_warning):

?>

    <p class="text-center alt">We use cookies to make interactions with our websites and services easy and meaningful, to better understand how they are used and to tailor advertising. You can read more and make your cookie choices <a href="../privacy/" style="color:white;"><u>here</u></a>. By continuing to use this site you are giving us your consent to do this.<br></p>
    <form action="index.php" method="post" >
       <div class="row">
          <div class="text-center large-12 columns">
             <button class="button tiny success" type="submit" name="privacy_button">ACCEPT</button>
          </div>
       </div>
    </form>

    <?php

       endif;

    ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...