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,我的表中有很多字段.
为什么我只获得一个价值?这有什么问题?
任何帮助或想法将非常感谢和奖励!
谢谢!:)
两件事情:
pg_fetch_array()
没有回报你的期望.$_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)