我正在阅读一些关于如何设置cookie的PHP教程。我注意到在FF4和IE9上成功设置了cookie,但它没有在Chrome中设置(11.0.696.60)。 PHP文件是从XAMPP(localhost)提供的。
我尝试了w3schools的例子:
<?php
setcookie("user", "Alex Porter", time()+3600);
?>
来自this site(对于localhost环境):
<?php
setcookie("username", "George", false, "/", false);
?>
提前致谢。
答案 0 :(得分:39)
禁用IP地址的Cookie和localhost
是一项设计决策。另见:https://code.google.com/p/chromium/issues/detail?id=56211
解决问题的方法包括:
/etc/hosts
以使用127.0.0.1 localhost.com
)。例如,在PHP中:
setcookie(
$AUTH_COOKIE_NAME,
$cookie_value,
time() + cookie_expiration(),
$BASE_DIRECTORY,
null,
false,
true
);
此处值null
表示不应设置域。
注意:未设置域名可防止Cookie对子域可见。
答案 1 :(得分:14)
域应该等于NULL。
&安培;应给予到期日。即,
setcookie("username", "George", time() + (20 * 365 * 24 * 60 * 60), "/", NULL);
答案 2 :(得分:4)
似乎这可能是Chrome的“开发人员工具”功能的错误。我一直试图设置一个cookie(但没有检索它),它与其他浏览器一起工作。它起作用,假设您信任FF的cookie查看部分或找到IE的cookie文件。在Chrome中,我依赖于“开发人员工具”(开发人员工具&gt;资源&gt; Cookie)的“Cookie”部分。
我决定更进一步,实际使用WHT(posted by Natcoweb)中的脚本输出cookie的值:
<?php
setcookie('test', 'This is a test', time() + 3600);
if(isset($_COOKIE['test'])){
$cookieSet = 'The cookie is ' . $_COOKIE['test'];
} else {
$cookieSet = 'No cookie has been set';
}
?>
<html>
<head><title>cookie</title></head>
<body>
<?php
echo $cookieSet;
?>
</body>
</html>
它适用于所有浏览器,包括Chrome(我得到:“Cookie是这是一个测试”)!但Chrome的Cookie检查员会继续显示“此网站没有Cookie”。我还设法找到存储在Chrome设置中的Cookie列表(选项&gt;引擎盖&gt;内容设置&gt;所有Cookie和网站数据),最后找到了Cookie(更多步骤要检查,但至少比开发人员工具更准确) )!
结论:正在设置Cookie,但Chrome的开发工具由于某些原因无法看到它。
答案 3 :(得分:2)
您检查了系统日期吗? $ date 如果现在是时候,那么你应该改变你的时间 $ date -s 2007.04.08-22:46 + 0000
我希望这会有所帮助。我有同样的问题而且有效
答案 4 :(得分:0)
当我尝试如下时,我遇到了同样的问题
setcookie("gb_role",base64_encode($_SESSION["role"]),time()+60*60*24*30);
当我将其改为
时setcookie("gb_role",base64_encode($_SESSION["role"]),time()+2592000);
我工作得很好,区别于时间()+ 60 * 60 * 24 * 30我只做了时间()+一些数值工作。我知道这没有意义但是有效。
答案 5 :(得分:0)
此代码适用于IE,Chrome和FF
if($_COOKIE['language']==NULL || empty($_COOKIE['language']))
{
$dirname = rtrim(dirname($_SERVER['PHP_SELF']), '/').'/';
$expire=time()+31536000;
setcookie("language", "English",$expire,"$dirname","mydomain.com",false,false);
}