How to solve "session_regenerate_id(): Cannot regenerate session id - headers already sent"

Igor Savinkin picture Igor Savinkin · Oct 7, 2013 · Viewed 33.2k times · Source

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.

Answer

chandresh_cool picture chandresh_cool · Oct 7, 2013

use

ob_start()

at the start of the file.