2012-01-07 154 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