【问题标题】:Cookie not being written in PHP even though it shows in Response headerCookie 不是用 PHP 编写的,即使它显示在响应标头中
【发布时间】:2016-03-12 20:06:20
【问题描述】:

我正在我的网站上对登录页面进行 AJAX 调用,并(尝试存储)使用 setcookie() 的 cookie。当我在 Chrome 检查器中看到请求标头时,我可以看到正确的请求标头,但没有存储 cookie。

我可能做错了什么? (我根本没有做任何输出)

【问题讨论】:

  • 你怎么知道它是正确的?
  • 你在做什么,怎么做的?

标签: php ajax cookies header setcookie


【解决方案1】:

你确定你的 PHP 代码根本没有做任何输出吗?甚至没有 1 个很小的空白字符(可能就在您的第一个 <?php 标签之前)。

因为即使 PHP 写入响应正文的单个字符,它也无法再写入 HTTP 标头...这是setcookie 必须做的才能创建 cookie。

另一种可能性,引用自PHP doc for setcookie

在下一次加载页面之前,Cookie 不会变得可见 cookie 应该是可见的。测试 cookie 是否成功 设置,在 cookie 之前的下一个加载页面上检查 cookie 过期。过期时间通过 expire 参数设置。一个不错的方法 调试cookie的存在是通过简单地调用 print_r($_COOKIE);.

(如果仍然不是这样,请使用 setcookie 向我们展示您的完整代码。我们需要更多信息来提供帮助。)

【讨论】:

  • 我确实仔细检查了是否存在任何正在输出的空白......我看不到!这是一个 XHR 调用,没有响应被发送回客户端(甚至没有成功消息a。响应标头确实显示如下内容:
  • Access-Control-Allow-Origin:http://[redacted].org Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check =0 连接:Keep-Alive 内容编码:gzip 内容长度:57 内容类型:text/html 日期:2015 年 12 月 8 日星期二 17:38:34 GMT 到期时间:1981 年 11 月 19 日星期四 08:52:00 GMT Keep-Alive:timeout=10, max=88 Pragma:no-cache Server:Apache Set-Cookie:userRole=Henry;到期=格林威治标准时间 2016 年 12 月 7 日星期三 17:38:34; path=.[DOTredacted].org Vary:Accept-Encoding X-Powered-By:PHP/5.3.29
【解决方案2】:

问题解决了。这是一个复杂项目的一部分。

我不得不去查看我的 Chrome 上的本地 cookie(而不是单独在标题中,或者只是使用 Chrome 的 editthiscookie 插件。)

长话短说,javascript 代码中有错误的 cookie 逻辑,它踩到了我的 cookie,但感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 2020-11-11
    • 1970-01-01
    • 2019-09-02
    • 2019-06-10
    • 1970-01-01
    • 2021-05-17
    相关资源
    最近更新 更多