-1

不知道我做错了什么......

这是用于设置 cookie 的页面: https ://www.ni-dieu-ni-maitre.com/test.php

    $domain = "ni-dieu-ni-maitre.com";
$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并输出内容: https ://www.ni-dieu-ni-maitre.com/test2.php

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

正如您在测试页面上看到的那样,cookie 始终为空

4

2 回答 2

1
... '.$domain');
    ^        ^

您使用单引号,这意味着 php 不会$domain用变量中的相应值替换:

文档

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

并且由于您无法.$domain从未设置的 cookie 中访问 c​​ookie:

文档

领域

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

将其更改为:

... '.'.$domain);
于 2013-03-08T07:50:41.600 回答
0

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

于 2013-03-08T07:53:20.187 回答