第一次点击时,Cookie警告提醒不会消失

时间:2016-12-14 10:31:24

标签: php function cookies get onclick

我为我的网站创建了此Cookie警报栏,它的工作原理是有意的。但是你需要点击关闭链接两次以关闭警告,原因是我无法弄清楚。

我使用以下函数来检查cookie是否存在。

function checkIfCookieExist($cookieName) {
    if(isset($_COOKIE[$cookieName])) {
        return true;
    }
    else {
        return false;
    }
}

如果cookie不存在,并且cookie get参数存在且等于1我创建一个cookie

if (!checkIfCookieExist('cookieConfirmation') && isset($_GET['cookie']) && $_GET['cookie'] == 1) {
    $cookieName     = 'cookieConfirmation';
    $cookieValue    = 'Cookie confirmation';
    $cookieDuration = 86400 * 30 * 3;
    setcookie($cookieName, $cookieValue, time() + $cookieDuration); 
}

打印出cookie栏,使用cookie的get参数链接到index

function renderCookieBar() {
echo('
    <div id="cookieBar">
        <p>blabla cookie, cookies on this site yo</p>
        <a href="index.php?cookie=1">I understand, close this box!</a>
    </div>
    ');
}

调用函数在我的html代码中的给定位置打印出cookiebar

if(!checkIfCookieExist('cookieConfirmation')) {
                renderCookieBar();
}

我感谢任何答案或帮助,

干杯!

1 个答案:

答案 0 :(得分:1)

在标题中设置cookie时,cookie不会直接存在;表示:Cookie在下一页页面点击时可用。

查看手册:http://php.net/set_cookie

  

设置好Cookie后,可以使用$ _COOKIE数组在下一页加载时访问它们。 Cookie值也可能存在于$ _REQUEST。

你可以

1。设置cookie并立即重新加载页面

使用header("Refresh:0");设置Cookie并强制使用浏览器参与。

if (!checkIfCookieExist('cookieConfirmation') && isset($_GET['cookie']) && $_GET['cookie'] == 1) {
    $cookieName     = 'cookieConfirmation';
    $cookieValue    = 'Cookie confirmation';
    $cookieDuration = 86400 * 30 * 3;
    setcookie($cookieName, $cookieValue, time() + $cookieDuration); 
    header("Refresh:0");
}

2。使用Javascript

使用JavaScript设置cookie时,可直接从浏览器获取。您也可以重写脚本,以便JavaScript设置cookie并删除通知栏。

有很多解决方案(也在SO上),如何轻松地在JavaScript中使用Cookie。如果您使用的是像jQuery这样的JavaScript库,那么您还可以plugins处理cookie。