2013-10-07 89 views
3

因爲我已經將yii應用程序移動到其他共享主機,並且應用程序runnig ... index.php?r =網站/登錄與登錄憑據我得到了warnig:如何解決「session_regenerate_id():無法重新生成會話ID - 頭已發送」

session_regenerate_id(): Cannot regenerate session id - headers already sent 

actionLogin「的代碼:

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)); 
}  

的文檔和論壇也說過與BOM問題。然而,在我的記事本++中,所有文件都保存爲UTF-8,沒有BOM。 我應該對文件進行特殊檢查嗎?哪個? 或者可能有其他原因的錯誤?

我已經添加了headers_sent($filename, $linenum)函數(參見上面的代碼)跟蹤發送的頭文件但沒有結果。

+1

你不得不進一步考慮到運行時,如果你已經讀/寫訪問和任何緩存文件問題 – sakhunzai

回答

8

使用

ob_start() 

在文件的開始。

+0

謝謝,chandresh_cool。我做到了,它有幫助,但!輸出是否能夠安全地影響其餘的代碼?我不包括ob_end()。? –

+0

不需要... –

0

製作用戶,您在您正在使用$模型 - >登錄()

3

一般來說,當我們回顯或打印後發頭這個錯誤沒有出現在呼應函數的任何。如果此錯誤出現在特定頁面上,請確保該頁面在調用start_session()之前不回顯任何內容。不可預知的錯誤的

例子:

<?php //a white-space before <?php also send for output and arise error 
session_start(); 
session_regenerate_id(); 

//your page content 

有時劑量不會在本地主機的電腦沒關係,但在你的遠程服務器上的問題。

0

我在Yii Project的main.php開頭有一個空行,刪除了這個問題。

1

從我的經驗來看,它主要是一個空白的錯誤。有時 前一個空間開幕PHP標籤或一些時間截止後在文件 的後面加上一個空格?>

/* white spaces here*/ <?php 

    //YOUR CODE 

?> /* white spaces here 
相關問題