PHP setcookie()并不总是覆盖值

时间:2014-04-21 17:39:51

标签: php ajax cookies

我一直在解决间歇性问题。我正在解决问题,但却是间歇性的,需要一段时间。我找到了一个有效的黑客,我只是不知道为什么而且它在困扰我,也许有人可以发现一个模式并猜测原因:

摘要:这一行并不总是有效:

setcookie('myhash',$aHash,0,MYSUBDIR);

背景:经过一段时间我回到PC后,经常会开始发生这种情况,只需打开Firefox标签并执行AJAX调用,例如添加到购物篮。 (WAMP服务器,localhost,由本地IP 192.x.x.x访问,在其他地方未经测试)。之后,我打开调试输出并可以刷新页面等,但cookie永远不会被设置。包括ajax在内的所有页面都在MYSUBDIR或其子目录中。

需要调试的步骤:我已经非常谨慎地确保了这些页面的安全性。调试输出和所有其他输出发送到缓冲区:我先调用ob_start(),无论如何,对于AJAX和页面,然后调用ob_end_flush()。从其他SO问题来看,这似乎是常见的失败。

我发现工作的hacky解决方法是在上面提到的那一行之前添加这一行:

setcookie('myhash',$aHash,time()-1000);

奇怪的是,使用这一行而不是上面的解决方法是行不通的:

setcookie('myhash',$aHash,time()-1000,MYSUBDIR);

关于原因的想法:

  1. 有时候MYSUBDIR常量并不总是设置,所以可能默认使用路径' /'来设置cookie。 - 虽然我有错误报告到E_ALL,详细输出和数据库,并没有看到任何此类错误记录。
  2. ' myhash' Cookie密钥是硬编码的,只在我的代码中的一个位置,因此我不认为这是问题所在 - 此外,我致电var_dump($_COOKIE)(在ob_start()之后)并且不要&# 39;看不到cookie密钥有什么问题。
  3. Cookie权限:通过IP和' localhost'进行访问:我不认为这是因为在单页加载中,我读取并尝试设置(覆盖)Cookie 。我可以通过刷新页面重复执行此操作,并且它会一直显示我无法覆盖的值。
  4. 有人发现可能导致无法覆盖cookie的原因吗?

0 个答案:

没有答案