0

请你帮助我好吗?我的网站没有设置以下简单的 cookie。虽然其他一些登录脚本可以,但这个不起作用。谢谢

测试.php

...

<form action="test2.php" method="post">
        Email: <br />
        <input type="email" name="email" value=""/> <br />
        <input type="submit" name="submit" value="Next"/> 
</form>

...

test2.php

<?php ob_start(); ?>

<?php
// call the header of the page
require('header.html');

// connect to database
require "connect.php";
?>

<?php
    $email = $_POST['email'];

    // set cookie
    $one_hour = time() + 3600;
    $set = setcookie(user_email, $email, $one_hour);

    if($set == TRUE) {
        print '<p> Cookie set</p>';
    } else {
        print '<p> Cookie not set</p>';
    }

// call footer of the page
require('footer.html');
?>

<?php ob_flush(); ?>

运行上述脚本后,我收到此错误:

警告:无法修改标头信息 - 标头已由第 16 行 /websites/public_html/test2.php 中的(输出开始于 /websites/public_html/test2.php:1)发送

未设置 Cookie

  • PS:我脚本的第 16 行是“$set = setcookie(email_noaccount, $email, $hr);”
4

2 回答 2

2

只需按以下方式更改上面的代码并尝试,将 ob_start() 放在 require() 之后

<?php
require "connect.php";
require('header.html');
?>
<?php ob_start(); ?>
于 2012-05-19T12:37:05.347 回答
0

您需要先将内容发送到输出缓冲区:

<?php ob_start(); ?>
  <--- right here
<?php
// call the header of the page
require('header.html');

// connect to database
require "connect.php";
?>
  <--- and right here
<?php
    $email = $_POST['email'];

您应该去掉输出中不必要的空格,以便在构建输出之前进行服务器端处理(包括标题修改)。

理想情况下,您不想将两者混为一谈。服务器端处理应该在构建输出之前发生,然后将使用处理结果构建输出并发送到客户端。

于 2012-05-19T12:35:53.473 回答