How to solve "session_regenerate_id(): Cannot regenerate session id - headers already sent"
Solution 1
use
ob_start()
at the start of the file.
Solution 2
Generally this error arise when we send header after echoing or printing. If this error arise on a specific page then make sure that page is not echoing anything before calling to start_session().
Example of Unpredictable Error:
<?php //a white-space before <?php also send for output and arise error
session_start();
session_regenerate_id();
//your page content
Sometimes it dose not matter in your localhost computer, but matters in your remote server.
Solution 3
I had an empty line at the beginning of main.php in Yii Project, removing that solved the issue for me.
Solution 4
In my case, also a Yii app, the same error was thrown upon logging in into the web app after deploying to a new infrastructure. I was able to compare the configuration files between the previous and new infrastructure and it turns out that I forgot to enable output buffering in php.ini on the php-fpm container.
This old discussion about the error message on Yii's issues board on GitHub gave me the hint on what to look for in the config files.
Now in my php.ini I have this setting:
; Note: Output buffering can also be controlled via Output Buffering Control
; functions.
; Possible Values:
; On = Enabled and buffer is unlimited. (Use with caution)
; Off = Disabled
; Integer = Enables the buffer and sets its maximum size in bytes.
; Note: This directive is hardcoded to Off for the CLI SAPI
; Default Value: Off
; Development Value: 4096
; Production Value: 4096
; http://php.net/output-buffering
output_buffering = 4096
Hope it helps others too.
Solution 5
From My experience its mostly an error of white spaces . Sometimes a space before the opening php tag or some times a space in the end of your file after the closing ?>
/* white spaces here*/ <?php
//YOUR CODE
?> /* white spaces here
Igor Savinkin
I work in web scraping field. I do also tech copy writing and webscraping.pro blog editing. Welcome to directly contact me by email (igor [dot] savinkin [at] gmail [dot] com) for web scraping and data protection issues. Also contact me if you are interesting in copy writing or blog guest posting.
Updated on June 27, 2020Comments
-
Igor Savinkin almost 4 years
I have moved a Yii app to another shared host. As the app was running ...index.php?r=site/login with login credentials, I got the warning:
session_regenerate_id(): Cannot regenerate session id - headers already sent
the
actionLogin
''s code:public function actionLogin($name = null ) { $model=new LoginForm; if ($name) $model->username = $name; if(isset($_POST['ajax']) && $_POST['ajax']==='login-form') { echo CActiveForm::validate($model); Yii::app()->end(); } if(isset($_POST['LoginForm'])) { $model->attributes=$_POST['LoginForm']; // validate user input and redirect to the previous page if valid if (headers_sent($filename, $linenum)) { echo "Headers have been sent in {$filename} line number is {$linenum}\n" exit; } if($model->validate() && $model->login()) $this->redirect(Yii::app()->user->returnUrl); } // display the login form $this->render('login',array('model'=>$model)); }
The docs and forums have said that there may be a problem with the BOM. Yet in my Notepad++ all files are saved as UTF-8 without BOM.
Should I do the special check of the files? Which ones? Or might there be another cause of the error?
I've added
headers_sent($filename, $linenum)
function (see in the code above) to trace the sent headers but with no result. -
Igor Savinkin over 10 yearsThank you, chandresh_cool. i did it and it's helped, yet! Is the output preventing going to safely influence the rest of the code? I do not inclute ob_end().?
-
Jonathan Morales Vélez over 4 yearsHey Chandresh, thanks for your answer. I find it incomplete thought. Could you please explain why using
ob_start()
solves the issue? -
RaisinBranCrunch over 2 yearsThis did help me. Also a possible indication that you don't have any php.ini loaded at all, as the default output buffering setting is 0. In my case I was setting up an environment to test an old PHP app and I'd forgotten this step.