php的“setcookie”无法跨浏览器工作?

时间:2011-02-18 01:23:31

标签: php javascript firefox cookies mootools

目前我正在使用setcookie设置我的Cookie,但它只能在Firefox和Safari中使用,并且不会在IE和Chrome(以及其他浏览器)中设置Cookie。

setcookie($name, $value, time()+3600 * 25);

我在一篇关于setcookie和IE的文章中读到,如果过期日期是过去的(或者太小),IE就会忽略它。

我知道Javascript可以设置cookie(我使用的是MooTools),但我更喜欢使用php和MooTools&饼干对我不起作用。

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:3)

检查服务器的时钟。如果它的运行时间超过25小时,那么就浏览器而言,time() + 3600 * 25可能仍然存在。

答案 1 :(得分:2)

PHP绝对可以通过浏览器设置cookie - 毕竟,它只是一个标题,你不会看到IE中的会话失败而PHP网站上的Chrome会不会这样?

我可以理解为什么IE不会尊重过去有效期的cookie。

您是否检查过这些浏览器中的标题?

答案 2 :(得分:0)

setcookie不依赖于浏览器,使用HTTP protocol headers设置Cookie,绝对跨浏览器

setcookie失败的原因可能是:

  • 在setcookie执行之前发送文本部分文本。使用error_reporting(E_ALL);打开错误消息以查看输出开始的行。 Cookie必须在第一行HTML或第一行echo执行之前发送。
  • 使用BOM以UTF-8编码保存php文件。 BOM可以关闭。在文本编辑器中打开文件,更改编码并重新保存。首先创建备份
  • setcookie与已通过的时间一起使用。 setcookie的第三个参数是到期时间。小于time(),cookie将不会被保存
  • setcookie指定错误的参数。检查您的cookie_name参数是否仅包含字母数字标签。不要指定cookie_pathcookie_domain

解决方案也在使用ob_start。此功能可确保成功发送所有标头。阅读手册以了解如何使用它。

答案 3 :(得分:0)

这可能会对你有所帮助。可能适用于所有IE浏览器。我自己没有测试过。
http://php.net/manual/en/function.setcookie.php#100094

以下是该页面的部分:

  

对于那些在打开Internet Explorer 6时为什么没有cookie的人,你的解释非常有趣。经过一些调查,打印时,一个过期时间不是0的cookie无法从IE6传递到服务器。发送过期时间为0的cookie。

     

因此:

     

setcookie(“TestCookie”,$ value,time()+ 3600); //将不会从IE6中的打印/打印预览发送

     

setcookie(“TestCookie”,$ value,0); //将从IE6中的打印/打印预览发送

     

我会让大家弄明白在IE6中打印时不发送正常过期的cookie的好主意...