我仍在重做并删除代码中的旧 mysql_* 命令。我试图转移我的会话登录表单旧代码,这就是我到目前为止得到的:
public function login($user, $password)
{
if (!empty($user) && !empty($password))
{
$password = $web->doHash($user, $password); // in this function is (return sha1(strtoupper($user).':'.strtoupper($password))
$stmt = $db_login->prepare("SELECT * FROM account WHERE username=:user AND pass_hash=:password");
$stmt->bindValue(':user', $user, PDO::PARAM_STR);
$stmt->bindValue(':password', $password, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->rowCount();
if ($rows > 0)
{
$results_login = $stmt->fetch(PDO::FETCH_ASSOC);
$_SESSION['user_name'] = $results_login['username'];
$_SESSION['user_id'] = $results_login['id'];
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
之后,我使用检查用户是否登录网站:
public function isLogged()
{
return (!empty($_SESSION['user_id']) && !empty($_SESSION['user_name']));
}
但似乎 - 这个函数返回总是空的,因为 $_SESSION 在 PDO 中不存在?当然,在我的网站上以这种形式使用注销:
public function logout()
{
unset($_SESSION['user_id']);
unset($_SESSION['user_name']);
}
但我认为 PDO 有不同的会话处理方式?我没有找到任何东西,所以我能以某种方式在 PDO 中添加 $_SESSION 而无需过多更改代码吗?
我在整个网络项目中都$_SESSION['user_name']
使用变量。$_SESSION['user_id']
概括:
1)如何正确使用PDO中的会话?
$stmt->fetch(PDO::FETCH_ASSOC);
2)使用和之间有什么区别$stmt->fetchAll();
谢谢你。