0

I have been told when output something like echo/var_dump before header() or session_start, a warning will be shown like this "php Cannot send session cookie-headers already sent by".

But the following code works fine. It is strange! Who can tell me the reason? PHP version is 5.6.9

<?php 
echo 'hello';
setcookie('a','a');
session_start();
$_SESSION['a'] = 'a';
header("location:test.php");
?>
4
  • 1
    Most likely it's because of output_buffering as mentioned here (It's a bit down in the answer - Bring a shovel cause you'll need to dig). Commented May 4, 2016 at 6:54
  • You said 'following code'. Where is it? Commented May 4, 2016 at 6:54
  • 1
    @Epodax A bit down? More like buried :-) Commented May 4, 2016 at 6:55
  • On web or on local machine? Commented May 4, 2016 at 7:13

1 Answer 1

2

If you use output_buffering = On in your php.ini you can send cookies after the headers have been sent.

As stated in php.ini comment :

Output buffering allows you to send header lines (including cookies) even after you send body content, at the price of slowing PHP's output layer a bit. You can enable output buffering during runtime by calling the output buffering functions. You can also enable output buffering for all files by setting this directive to On. If you wish to limit the size of the buffer to a certain size - you can use a maximum number of bytes instead of 'On', as a value for this directive (e.g., output_buffering=4096).

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.