PHP Session只存储一个值

Pin*_*wer 2 php postgresql session

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;
        }
}
Run Code Online (Sandbox Code Playgroud)

在调用此函数后,我被重定向到我的前端.
当我尝试print_r($_SESSION);在那里时,我在会话中只有一个值,那就是user_id,我的表中有很多字段.
为什么我只获得一个价值?这有什么问题?

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

Fra*_*ila 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
Run Code Online (Sandbox Code Playgroud)

因此,在你的foreach循环中,在user_id密钥之后,你实际上是这样做的:

$_SESSION[0] = 1;
Run Code Online (Sandbox Code Playgroud)

这是非法的,因此会话对象停止工作.

而是这样做:

// 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']
Run Code Online (Sandbox Code Playgroud)