不确定我做错了什么......
以下是用于设置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始终为空
答案 0 :(得分:1)
... '.$domain');
^ ^
你使用单引号意味着php不会用变量中的相应值替换$domain
:
Docs:
注意:与双引号和heredoc语法,变量和。不同 特殊字符的转义序列不会被扩展 以单引号字符串出现。
由于您无法访问来自.$domain
的Cookie,因此未设置Cookie:
Docs:
的域强> 的
Cookie可用的域。将域设置为 'www.example.com'将在www子域中提供cookie 更高的子域名。 Cookie可用于较低域名,例如 'example.com'将可用于更高的子域,例如 'www.example.com'。较旧的浏览器仍在实施已弃用的» RFC 2109可能需要领先。匹配所有子域。
将其更改为:
... '.'.$domain);
答案 1 :(得分:0)
从RFC 2109开始,必须使用起始点设置domain
参数(请参阅http://php.net/setcookie)。请试试,你的代码似乎没问题。请从'.$domain.'
删除单引号。