Question

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.

Was it helpful?

Solution

use

ob_start()

at the start of the file.

OTHER TIPS

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.

I had an empty line at the beginning of main.php in Yii Project, removing that solved the issue for me.

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 

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.

Make user you not echoing anything in function where your are using $model->login()

try to use

ob_start();

if that won't work then try following

ob_start();
ob_clean();
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top