PHP $_COOKIE 获取带预设变量的cookie

PHP $_COOKIE get cookie with preset variable

解决方案:

$_COOKIE 正在用下划线替换句点。

str_replace('.','-',$cookie_name); 

问题

我正在设置这样的 cookie。

$cookie_name = '_visited-'.$user_ip.'-'.$visted_link; 
setcookie($cookie_name,'visited',time() + (86400 * 30), "/");
header('Location: '.$_SERVER['REQUEST_URI']);
exit;

然后尝试查看是否已设置 cookie 并从 link 数组中取消 link 它,就像这样。

foreach($links['unique'] as $link){
    $cookie_name = '_visited-'.$user_ip.'-'.$link; 
    if(isset($_COOKIE[$cookie_name])){
        if(($key = array_search($l, $links['unique'])) !== false) {
            unset($links['unique'][$key]);
        }
    }
}

奇怪的是,即使在使用 isset 的 foreach 中明确设置了 cookie,我也无法检测到 cookie 存在,因此我无法删除访问过的 link。

您无法在设置的同一页面上访问 cookie。

正如您在 manual 中看到的那样,它清楚地说明了这一点:

设置 cookie 后,可以在下一个页面加载时使用 $_COOKIE 数组访问它们。

如何将 $links 从一个页面转移到另一个页面? PHP 的每次调用都是独立的。这就是为什么我将 cookie 保存到数据库中的会话 table 的原因。每个页面的第一步是从数据库加载会话。

我认为您的 cookie 从未被发现,因为 $links 在每次执行时都会启动。在页面顶部添加 print_r($links) 以查看和编辑您的问题。

好的,所以找到问题了。我将用户 IP 作为 cookie 名称的一部分。 这 。被 _ 取代,所以继续并取代所有 . with - 设置 cookie 时。完全按照我的预期工作。