Bug #73245 [Asn]: session_start() doesn't start the session if headers have been sent
| From: | cmb@php.net | Date: | Wed, 05 Oct 2016 15:02:38 +0000 |
| Subject: | Bug #73245 [Asn]: session_start() doesn't start the session if headers have been sent | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-204486@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=73245&edit=1
ID: 73245
Updated by: cmb@php.net
Reported by: php at duncanc dot co dot uk
Summary: session_start() doesn't start the session if headers
have been sent
Status: Assigned
Type: Bug
Package: Session related
Operating System: Linux
PHP Version: 7.1.0RC3
Assigned To: yohgaki
Block user comment: N
Private report: N
New Comment:
Indeed, it appears to break only if there is already some output
before the first session_start(). Try:
<?php
echo "start\n";
session_start();
$_SESSION['blah'] = 'foo';
var_dump($_SESSION);
session_write_close();
session_start();
var_dump($_SESSION);
Previous Comments:
------------------------------------------------------------------------
[2016-10-05 12:17:25] yohgaki@php.net
@cmd Thank you for investigation.
I'll look into this, but it seems I need more info. It works for me...
Perhaps, SAPI involved?
[yohgaki@dev PHP-7.1]$ ./php-bin
<?php
session_start();
$_SESSION['blah'] = 'foo';
var_dump($_SESSION);
session_write_close();
session_start();
var_dump($_SESSION);
?>
array(1) {
["blah"]=>
string(3) "foo"
}
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at
-:4) in - on line 7
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started
at -:4) in - on line 7
array(1) {
["blah"]=>
string(3) "foo"
}
------------------------------------------------------------------------
[2016-10-05 10:51:30] cmb@php.net
According to
git bisect the offending commit is
<https://github.com/php/php-src/commit/c200e8e1>.
Yasuo, can you please have a look at this issue.
------------------------------------------------------------------------
[2016-10-04 17:40:56] php at duncanc dot co dot uk
Description:
------------
In 7.0 and 5.6 calling session_start() even if headers have
been sent still made $_SESSION usable, but 7.1 changes this behaviour.
Test script:
---------------
session_start();
$_SESSION['blah'] = 'foo';
var_dump($_SESSION);
session_write_close();
session_start();
var_dump($_SESSION);
Expected result:
----------------
The dumped array should be the same both times:
array(1) {
["blah"]=>
string(3) "foo"
}
Actual result:
--------------
The second array dump is empty
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=73245&edit=1