Cookie未被设置

Could you please help me? My website does not set the following simple cookie. Although some other login scripts does but this one does not work. Thanks

test.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(); ?>

After running the above scripts, I get this error:

Warning: Cannot modify header information - headers already sent by (output started at /websites/public_html/test2.php:1) in /websites/public_html/test2.php on line 16

Cookie not set

  • PS: Line 16 on my script is "$set = setcookie(email_noaccount, $email, $hr);"

just change above code in following way and try, put ob_start() after require()

<?php
require "connect.php";
require('header.html');
?>
<?php ob_start(); ?>

You're sending content to the output buffer before you need to:

<?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'];

You should get rid of that unnecessary whitespace in the output so you can conduct your server-side processing (including header modification) before building output.

Ideally, you don't want to mix the two. The server-side processing should occur before the output is built, then the output would be built using the results of the processing and sent to the client.