setcookie()不会在Google Chrome中设置Cookie

时间:2011-05-01 14:35:36

标签: php google-chrome setcookie

我正在阅读一些关于如何设置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);
?>

提前致谢。

6 个答案:

答案 0 :(得分:39)

禁用IP地址的Cookie和localhost是一项设计决策。另见:https://code.google.com/p/chromium/issues/detail?id=56211

解决问题的方法包括:

  • 设置本地域名(例如,修改/etc/hosts以使用127.0.0.1 localhost.com)。
  • 使用http://myproject.localhacks.com/(指向127.0.0.1)。
  • 设置Cookie时使用空域值。

例如,在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);
}