PHP - 页面刷新后无法读取Cookie

问题描述 投票:0回答:1

我知道这是一个常见问题,但似乎没有任何作用。我已经为网站创建了年龄限制,如果用户失败,他们将在 30 天内不再有权重试,并且只会显示“拒绝”消息。如果他们成功了,他们就会看到内容。

注意:这一切都发生在单个页面/文件上,提交后,检查年龄并设置适当的 cookie,然后刷新页面以显示相应的内容。

我是这样设置的:

if($year > 0  && $month > 0 && $day > 0){
    if (time() < strtotime('+18 years', strtotime($submittedDate))) {
        setcookie('age_check', 'denied', time() + (86400 * 30), '/', '.domain.com');
        header('Refresh:0; url=/subpage');
    }else{
        setcookie('age_check', 'validated', time() + (86400 * 30), '/', '.domain.com');
        header('Refresh:0; url=/subpage');
    }
}

然后我用这个检查:

if($_COOKIE['age_check'] == 'denied'){
    echo '<h1 class="age-error">Sorry, you may not access this content.</h1>';
    return;
}elseif(!isset($_COOKIE['age_check'])){
    // if it's not present at all, display the age form
}else{
    // it must be set and validated, so show the age gated content
}

在刷新之前,我正在输出 cookie 值进行测试,并看到它输出一瞬间,但刷新后它是空的,只显示表单,没有任何错误消息或显示内容,这告诉我

!isset($_COOKIE['age_check'])
返回 true。但是,我可以在开发工具中看到它设置并且它具有正确的值。

有人可以解释一下这是怎么回事吗?

php setcookie
1个回答
0
投票

所以,如果其他人遇到这个奇怪的问题,我找到了答案。

似乎特定于 WP Engine(也可能是其他主机)以及它们在其端缓存 cookie 的方式。因此,我必须联系他们,让他们将特定的 cookie 名称添加到缓存设置下的排除列表中。他们不允许你自己这样做,所以你必须联系他们来添加它,但至少这是一个快速的聊天。

© www.soinside.com 2019 - 2024. All rights reserved.