2011-12-15 73 views
2
function StoreUserProfileInSession($username, $password) 
{ 
     session_start(); 
     $query = pg_query("SELECT * FROM mytable where username = '$username' AND password = '$password'"); 

     $rows = pg_fetch_array($query); 

     foreach($rows as $key => $value) 
     { 
      if($key == 'password') //do not store password in session because it's DANGEROUS! 
       continue; 

      $_SESSION[$key] = $value; 
     } 
} 

在調用這個函數之後,我被重定向到了我的前端。
當我嘗試print_r($_SESSION);在那裏,我只有一個會話中的值,這是user_id,我的表中有很多字段。
爲什麼我只能得到一個值?這有什麼問題?PHP Session只存儲一個值

任何幫助或想法將不勝感激和獎勵!
謝謝! :)

+1

您是否記得在調用此函數的請求中使用`session_start()`? – mauris 2011-12-15 03:30:34

+0

@thephpdeveloper:函數頂部有一個`session_start()`,應該不夠嗎? – 2011-12-15 03:35:05

回答

5

兩件事情:

  1. pg_fetch_array()沒有返回你所期望的。
  2. $_SESSION不能有任何鍵名不能也是一個PHP變量名

$rows看起來是這樣的:

$rows = array(
    'user_id' => 1 
    1, 
    'password' => 'THE PASSWORD', 
    'THE PASSWORD', 
); 
$rows['user_id'] === $rows[0]; 
// etc 

因此,在您的foreach循環,在user_id鍵之後,你實際上是這樣:

$_SESSION[0] = 1; 

這是非法的,所以會議對象停止工作。

而是做到這一點:

// PGSQL_ASSOC says, "only return named keys, not numeric keys" 
$therow = pg_fetch_array($query, null, PGSQL_ASSOC); 
unset($therow['password']); 
$_SESSION['user'] = $therow; 
pg_free_result($query); 


// get user data like this: 
$_SESSION['user']['user_id'] 
1

也許是這一點,因爲你只讓你執行查詢後一排?

有多少行被返回:

"SELECT * FROM mytable where username = '$username' AND password = '$password'" 
0

謝謝回答。我設法回答這個問題。

function StoreUserProfileInSession($username, $password) 
    { 
     session_start(); 
     $query = pg_query("SELECT * FROM mytable where username = '$username' AND password = '$password'"); 
     $fields = array(); 

     while($rows = pg_fetch_array($query)) 
     { 
      $fields[] = $rows; 
     } 

     foreach($fields[0] as $key => $value) 
     { 
      if(is_int($key) || $key == 'password') 
       continue; 
      $_SESSION[$key] = $value; 
     } 
    }