2012-01-07 156 views
0

我是一個完整的PHP會話noob。我已經讓他們在以前工作,但從來沒有在現場服務器上,只在我的本地測試環境中工作。PHP會話變量設置不正確

我的問題是,$ _SESSION變量總是一個空數組(未定義)。

這是一個登錄表單,它正在對php文件進行AJAX調用。

這裏是AJAX調用:

$.ajax({ 
     url: 'xhr/login.php', 
     data: $(this).serialize(), 
     type: 'post', 
     dataType: 'json', 
     success: function(result){ 
      if (result.success){ 
       console.log(result); 
      }; 
     }, 
     error: function(e){console.log("Could not retrieve login information")} 
    }); 

下面是登錄腳本中的相關部分:

# Start the user session 
if(!isset($_SESSION)) { 
    session_start(); 
    session_regenerate_id(); 
}; 

# Set our session values 
       WHILE($session_row = mysql_fetch_assoc($session_result)){ 
        $_SESSION['id'] = $session_row['id']; 
        $_SESSION['last_login'] = $session_row['last_login']; 
        $_SESSION['username'] = $session_row['username']; 
        $_SESSION['signup_date'] = $session_row['signup_date']; 
       }; 

我已返回的Json返回會話變量爲:

echo json_encode(array("success"=>"user logged in", "session"=>$_SESSION)); 

但是當我將result.session變量記錄到控制檯時,它只是返回一個空數組。

+1

爲什麼'while'大寫?你在哪裏做這個數據庫查詢? – cspray 2012-01-07 18:04:33

+0

其中是$ session_result被生成?如果沒有錯誤產生,可能是「$ session_row = mysql_fetch_assoc($ session_result)」永遠不會返回true,因此循環被忽略。另外,正如查爾斯所問,它應該是「一會兒」,而不是一會兒。 – 2012-01-07 18:05:55

回答

1

我的問題是,$ _SESSION變量總是一個空數組(未定義)。

這對於已經成功啓動的每個會話都是正常的

session_regenerate_id();

哎喲。哎喲。哎喲。爲什麼在每次請求時都會重新生成id?

刪除該行。它可能也會導致你的問題。

+0

顯然更改爲: '$ session_result = mysql_query($ session_sql); \t \t \t \t $ returned_rows = mysql_fetch_assoc($ session_result); \t \t \t \t IF(計數($ returned_rows)> 0 &&計數(mysql_fetch_assoc($ session_result))<2){' 從該: '$ session_result =的mysql_query($ session_sql); \t \t \t \t IF(計數(mysql_fetch_assoc($ session_result))!= 0 &&計數(mysql_fetch_assoc($ session_result))<2){ \t \t \t \t \t \t \t \t \t \t $ returned_row = mysql_fetch_assoc($ session_result );' 是關鍵。不知道爲什麼這有效? – StephenRios 2012-01-07 22:00:43

+0

我也沒有;)您正在使用自己的會話保存處理程序? – hakre 2012-01-07 22:04:08