33

我正在阅读一些关于如何设置 cookie 的 PHP 教程。我注意到在 FF4 和 IE9 上成功设置了 cookie,但在 Chrome (11.0.696.60) 中没有设置。PHP 文件由 XAMPP (localhost) 提供。

我尝试了 w3schools 的示例:

<?php
setcookie("user", "Alex Porter", time()+3600);
?>

并从此站点(对于本地主机环境):

<?php
setcookie("username", "George", false, "/", false);
?>

提前致谢。

4

6 回答 6

40

禁用 IP 地址的 cookielocalhost是一项设计决策。另见: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 对子域可见。

于 2011-05-01T15:41:13.040 回答
15

域应该等于 NULL。

& 应给出到期日期。IE,

setcookie("username", "George", time() + (20 * 365 * 24 * 60 * 60), "/", NULL);
于 2013-04-18T09:06:37.613 回答
5

看起来这可能是 Chrome 的“开发者工具”功能的一个错误。我一直在尝试设置 cookie(但不检索它)并且它与其他浏览器一起工作。它起作用了,假设您信任 FF 的 cookie 查看部分或找到 IE 的 cookie 文件。在 Chrome 中,我依赖于“开发者工具”(开发者工具 > 资源 > Cookies)的“Cookies”部分。

我决定更进一步,使用 WHT 中的这个脚本(由 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 列表(选项 > 后台 > 内容设置 > 所有 cookie 和站点数据),最后找到了 cookie(检查步骤更多,但至少比开发人员工具更准确)!

结论:cookies被设置了,但是Chrome的开发工具由于某种原因看不到它。

于 2011-05-02T03:49:24.827 回答
2

你检查过你的系统日期吗?$ date 如果它是旧时间,那么你应该改变你的时间 $ date -s 2007.04.08-22:46+0000

我希望这有帮助。我有同样的问题,它的工作

于 2012-04-12T11:35:44.413 回答
2

当我尝试如下时,我遇到了同样的问题

setcookie("gb_role",base64_encode($_SESSION["role"]),time()+60*60*24*30);

当我把它改成下面

setcookie("gb_role",base64_encode($_SESSION["role"]),time()+2592000);

我工作得很好,区别不是 time()+60*60*24*30 我只是做了 time()+一些数值工作。我知道这没有意义,但它奏效了。

于 2012-04-13T10:13:49.117 回答
1

此代码在 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);
}
于 2014-04-19T17:59:45.920 回答