PHP Session хранит только одно значение - PullRequest
2 голосов
/ 15 декабря 2011
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, в моей таблице много полей.
Почему я получаю только одно значение? что с этим не так?

Любая помощь или идея будут высоко оценены и вознаграждены!
Спасибо! :)

Ответы [ 3 ]

5 голосов
/ 15 декабря 2011

Две вещи:

  1. pg_fetch_array() не возвращает то, что вы ожидаете.
  2. $_SESSION не может иметь любое имя ключа, которое также не может быть переменной phpname .

$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 голос
/ 15 декабря 2011

Возможно, это потому, что вы получаете только одну строку после выполнения запроса?

Сколько строк возвращено:

"SELECT * FROM mytable where username = '$username' AND password = '$password'"
0 голосов
/ 15 декабря 2011

Спасибо за ответ. Мне удалось ответить на этот вопрос.

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;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...