谷歌Chrome(和IE)拒绝在PHP中使用方法setcookie设置我的cookie

时间:2012-04-26 06:24:32

标签: php google-chrome cookies web

我正在寻找stackoverflow的答案,但没有人能解决我的问题。 我在http://machine/~lcavaill/folder/

上托管了一个网站

在php中我使用

setcookie( COOKIE_AUTH, $cookie, $expiration, COOKIE_PATH, COOKIE_DOMAIN, false, true )

使用以下变量

define( 'COOKIE_DOMAIN', 'machine' );
define( 'COOKIE_PATH', '/~lcavaill/folder/' );
define( 'COOKIE_AUTH', 'foobar' );
$expiration = time() + 300;

在查看响应标头时,我无意中找到了Set-Cookie标头

Set-Cookie:test=lcavaille%7C1335420792%7C44baaa2b2eb43cfb8ab2d66f74afd11e; expires=Thu, 26-Apr-2012 06:13:12 GMT; path=/~lcavaill/folder/; domain=machine; httponly

但是对于另一个页面上的下一个请求,cookie没有设置,我在Chrome(或IE)的任何地方找不到它,但它在Firefox中可以正常工作。

到目前为止,我查了一下:

  1. 如果客户端和服务器时间同步
  2. 如果Chrome隐私设置正常(允许设置本地数据并且没有例外)
  3. $ _ SERVER [“HTTP_HOST”]匹配COOKIE_DOMAIN变量
  4. 启用/禁用http_only
  5. 将Cookie路径设置为/
  6. 将到期时间设置为0
  7. 你对我有什么想法吗?!

    干杯, 利奥

2 个答案:

答案 0 :(得分:0)

这些只是一个疯狂的猜测,但是:

答案 1 :(得分:0)

我遇到了同样的问题。

更多的是,setcookie()在FF34,Chrome39和IE8&上工作(返回true)。 IE11在我的开发服务器上(win7 64bit,wamp,php 5.3.9),但它会在生产网站(debian,php 5.4.35)上为Chrome和IE返回false。

经过一些谷歌搜索并仔细阅读我发现的setcookie()手册(之前我曾遗漏过的内容),手册上写着:"If output exists prior to calling this function, setcookie() will fail and return FALSE."

起初我不确定If output exists prior to calling this function究竟是什么意思,但显然应该没有输出到浏览器来设置cookie。

在我输出有问题的代码行之后,问题就消失了,代码也适用于上述浏览器(包括开发和生产服务器),以及Android上最新的FF和Chrome。