setcookie() 饼干总是空的

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

不确定我做错了什么......

$articleid = "test";

$lastviewedarticles = array();

if (isset($_COOKIE["viewed_articles"]) ) {
  $lastviewedarticles = unserialize($_COOKIE["viewed_articles"]);
}

if (!in_array($articleid, $lastviewedarticles)){
    $count = count($lastviewedarticles);
    if($count>=29)
        array_shift($lastviewedarticles);
    $lastviewedarticles[] = $articleid;
}
setcookie('viewed_articles', serialize($lastviewedarticles), time()+60*60*24*30, '/', '.' . $domain);

然后这个页面读取cookie并输出内容:

if ( isset($_COOKIE["viewed_articles"]) ) {
  $lastviewedarticles = unserialize($_COOKIE["viewed_articles"]);
}
echo "cookie is currently:<br>";
print_r($lastviewedarticles);

正如您在测试页面上看到的那样,cookie 总是空的

php cookies setcookie
2个回答
1
投票
... '.$domain');
    ^        ^

您使用单引号表示 php 不会用变量中的相应值替换

$domain

文件

注意:与双引号和 heredoc 语法不同,变量和 特殊字符的转义序列在出现时不会扩展 出现在单引号字符串中。

并且由于您无法从

.$domain
访问cookie,因此未设置cookie:

文件

cookie 可用的域。将域设置为 'www.example.com' 将使 cookie 在 www 子域中可用 和更高的子域。可用于较低域的 Cookie,例如 'example.com' 将可用于更高级别的子域,例如 'www.example.com'。旧版浏览器仍在执行已弃用的 » RFC 2109 可能需要前导 .匹配所有子域。

改成:

... '.'.$domain);

0
投票

RFC 2109 开始,

domain
参数必须设置为起始点(参见 http://php.net/setcookie)。请尝试一下,您的代码似乎没问题。请从
'.$domain.'
.

中删除单引号
© www.soinside.com 2019 - 2024. All rights reserved.