【问题标题】:php's "setcookie" doesn't work cross-browser?php“设置cookie”不能跨浏览器工作?
【发布时间】:2011-02-18 01:23:30
【问题描述】:

目前我正在使用 setcookie 来设置我的 cookie,但是它只适用于 Firefox 和 Safari,并且 IE 和 Chrome(可能还有其他浏览器)中没有设置 cookie。

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

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

我知道 Javascript 可以设置 cookie(我正在使用 MooTools),但我更喜欢使用 php,而 MooTools 和 cookie 不适合我。

任何帮助将不胜感激。

【问题讨论】:

    标签: php javascript firefox cookies mootools


    【解决方案1】:

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

    【讨论】:

    • 我将尝试将到期日期设置为 * 100 之类的值。服务器时钟已死。 time() 3600 * 25 应该抵消任何时区差异。
    • 是的!我将它设置为 * 50 并且显然 IE 正在接受 cookie。我没有亲自测试过(这是来自朋友的),所以如果它不起作用,我会更新这个问题。
    【解决方案2】:

    PHP 绝对可以跨浏览器设置 cookie - 毕竟,它只是一个标头,您不会在 PHP 网站上的 IE 和 Chrome 中看到会话失败吗?

    我可以理解为什么 IE 不接受过期日期已过的 cookie。

    你检查过这些浏览器的标题吗?

    【讨论】:

    • 过去的过期日期不只是向浏览器发出删除 cookie 的信号吗?
    • @yc 是的,我会这么说。一段时间以来,我已经对 cookie 使用了更高级别的抽象。
    【解决方案3】:

    setcookie 不依赖于浏览器,cookie 使用HTTP protocol headers 设置,肯定跨浏览器

    setcookie失败的原因可能是:

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

    解决方案也是使用ob_start。此功能保证所有标头都发送成功。阅读手册了解如何使用它的详细信息。

    【讨论】:

    • 包含多个字母数字字符的 cookie 是不是一个坏举动?我使用 [ ] 符号。
    【解决方案4】:

    这可能会对您有所帮助。可能适用于所有 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 的好主意...

    【讨论】:

      猜你喜欢
      • 2011-01-20
      • 1970-01-01
      • 2014-08-10
      • 2012-02-02
      • 2014-05-07
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      相关资源
      最近更新 更多