PHP Session只存储一个值


PHP Session only stores one value

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,我有很多字段在我的表。
为什么我只得到一个值?这有什么不对吗?

任何帮助或想法将非常感激和奖励!
谢谢!:)

两件事:

  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']

也许这是因为你只得到一行后,你执行你的查询?

返回多少行:

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

谢谢你的回答。我成功地回答了这个问题。

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