0

我正在寻找关于 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

你对我有什么想法吗?!

干杯,狮子座

4

2 回答 2

0

我有同样的问题。

更重要的是,setcookie() 在我的开发服务器(win7 64bit,wamp,php 5.3.9)上的 FF34、Chrome39 和 IE8 和 IE11 上工作(返回 true),但它会在生产站点(debian,php 5.4)上返回 false .35) 适用于 Chrome 和 IE。

经过一番谷歌搜索并仔细阅读setcookie()手册后,我发现(我之前错过了一些东西)手册说:"If output exists prior to calling this function, setcookie() will fail and return FALSE."

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

在我在任何输出之前移动有问题的代码行之后,问题就消失了,代码可以在上述浏览器(开发和生产服务器)以及最新的 FF 和 Android 上的 Chrome 上运行。

于 2015-01-08T13:07:36.537 回答
0

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

于 2012-12-01T00:31:18.157 回答