2012-01-07 3 views
0

Я полный noob на php сессиях. Раньше я работал над ними, но никогда на живом сервере, только в локальной тестовой среде.PHP Session Variable Неправильная установка

Моя проблема заключается в том, что переменная $ _SESSION всегда представляет собой пустой массив (не неопределенный).

Это для формы входа, которая вызывает вызов AJAX в php-файл.

Вот 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

+0

где генерируется $ session_result? Если ошибки не генерируются, может быть, что «$ session_row = mysql_fetch_assoc ($ session_result)» никогда не возвращает true, поэтому цикл игнорируется. Кроме того, как сказал Чарльз, это должно быть «пока», а не WHILE. –

ответ

1

Моя проблема в том, что переменная $ _SESSION всегда представляет собой пустой массив (не неопределенный).

Это абсолютно нормально для каждой сессии, которая была успешно началась.

session_regenerate_id();

Уч. Уч. Уч. Почему вы регенерируете id из синего цвета по каждому запросу?

Удалите эту линию. Это возможно также причина ваша проблема.

+0

По-видимому, меняется на это: '$ session_result = mysql_query ($ session_sql); \t \t \t \t $ return_rows = mysql_fetch_assoc ($ session_result); \t \t \t \t ЕСЛИ (COUNT ($ 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

+0

У меня тоже нет;) Вероятно, вы используете собственный обработчик сохранения сеанса? – hakre