【问题标题】:setting a cookie after include("file")在 include("file") 之后设置 cookie
【发布时间】:2011-03-11 21:28:23
【问题描述】:

我有一个登录脚本,我记录了过度失败的用户。在我的调试目的中,我在第一次尝试失败后记录它。

我通过访问它来测试代码。我将文件命名为fail_cookie.php。当我从浏览器访问它时,它会很好地设置 cookie。但是,如果我使用名为 login.ws 的登录表单并且我有以下代码:

if (!isset($_COOKIE["login"])) {
        logUser($_POST['username'], $_POST['password'], time(), $_SERVER['REMOTE_ADDR']);
        include "fail.ws";
    }

在fail.ws 内部是我设置fail_cookie.php 的地方。我将其包含在<head> .. .. <?php include("fail_cookie.php"); ?> </head>

当我被login.ws 重定向到fail.ws 时,cookie 永远不会设置。

此代码曾经在我的上一个主机上运行,​​但在我当前的主机上不运行。是我的主机问题还是我的问题?如果是我的,有人可以给我一些建议吗?

谢谢。

【问题讨论】:

  • 仅供我参考...为什么fail.ws?而setcookie 也不工作?你能显示你设置cookie的那一行吗?
  • 不知怎么复制的,其他的我删掉。
  • fail.ws 和 fail_cookie.php 是做什么的?

标签: php


【解决方案1】:

在php.ini 中启用output_buffering。这样您就可以在您的 php 文件向用户发送输出后设置 cookie。 - 事实上输出将被缓冲,并在您的 php 脚本结束后发送。

您也可以在 .htccess 文件中启用此功能:

php_flag output_buffering on

【讨论】:

  • 真的吗?哇,我认为这是我的问题哈哈,我正在扯掉我的头发,想知道我做错了什么。非常感谢,我会让他们启用它。
  • 这是你的问题。您在发送标头之前输出内容(cookie 是标头)。输出缓冲只是在将所有内容发送到服务器之前将其写入 PHP 的内存 - 因此它会增加您的内存使用量。
  • @ThiefMaster,我该如何解决这个问题或以正确的方式做到这一点?感谢您的意见。
  • @Kyle 你可以重新组织你的代码。但是,如果它在您的上一个主机上运行良好,它现在应该可以正常运行。如果您正在访问一个高流量的网站,那么这当然是不可取的,但是在这种情况下您必须观看一些好书。
  • 不要混合使用 PHP 和 HTML 代码,而是使用将在最后呈现的模板 - 在发送所有标头之后。
猜你喜欢
  • 2018-02-20
  • 2017-07-23
  • 2015-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
相关资源
最近更新 更多