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

Ely*_*yas 32 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);
?>
Run Code Online (Sandbox Code Playgroud)

并从此站点(对于localhost环境):

<?php
setcookie("username", "George", false, "/", false);
?>
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Mik*_*est 40

禁用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
);
Run Code Online (Sandbox Code Playgroud)

此处的值null表示不应设置域.

注意:不设置域会阻止cookie对子域可见.

  • myproject.localhacks.com为+1.多么美妙的黑客.:) (3认同)

小智 15

域应该等于NULL.

应该给出一个到期日.即

setcookie("username", "George", time() + (20 * 365 * 24 * 60 * 60), "/", NULL);
Run Code Online (Sandbox Code Playgroud)


Ely*_*yas 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>
Run Code Online (Sandbox Code Playgroud)

它可以在包括Chrome在内的所有浏览器上运行(我得到:“ cookie是这是一个测试”)!但是,Chrome的Cookie检查器会继续显示“此网站没有Cookie”。我还设法找到了存储在Chrome设置中的Cookie列表(“选项”>“高级选项”>“内容设置”>“所有Cookie和网站数据”),最后找到了Cookie(检查步骤更多,但至少比开发者工具更准确)!

结论:正在设置cookie,但是Chrome的开发工具由于某种原因无法看到它。