Php 在登录过程中使用OOP的方法

Php 在登录过程中使用OOP的方法,php,oop,Php,Oop,在当前登录方法中: $sth = $this->db->prepare("SELECT id, username, active FROM user WHERE username = ? AND password = ?"); $sth->setFetchMode(PDO::FETCH_OBJ); $sth->execute(array($username, $password)); if (($obj = $sth-&

在当前登录方法中:

 $sth = $this->db->prepare("SELECT id, username, active FROM user WHERE username = ? AND password = ?");
        $sth->setFetchMode(PDO::FETCH_OBJ);
        $sth->execute(array($username, $password));

        if (($obj = $sth->fetch()) !== FALSE)
            return $obj;
在login.php文件中

$auth = new Auth($db);

$user = $auth->login('username', 'password');

if ($user) {
    if ($user->active == 0) { die('You must activate your account')}

    //If all is okay... Set the session variables...
}

但是有人告诉我,我更愿意在login()方法中设置会话变量,但是如果我这样做了,我应该如何处理检查,比如用户是否被激活?

您可以在任何一个过程中进行。会话变量是相同的


要检查活动用户,只需在查询中添加“and userActive=1”。要停用用户,只需将该用户的此列更改为0。

我可能会创建如下结构:

class Auth {
  public function login($user, $pass);
  public function logout();
  public function loggedIn();

  private function getUserSession();
  private function updateUserSession();
  private function deleteUserSession();
}
login()检查数据库并在身份验证成功时(如果用户处于活动状态,则执行user:password match和其他测试)运行updateUserSession()。通过返回$this->loggedIn()的结果结束

注销()使用deleteUserSession()取消会话


loggedIn()使用getUserSession()检查会话,如果用户登录,则返回true或false。

我认为您的方法没有任何错误。为什么要在
login
功能中设置会话?当然,您可以这样做,但随后您必须将
活动
检查也移动到
登录
方法中。这是一个考虑到代码依赖性的声明:这是一个常见错误。类通常不应依赖于任何其他文件。任何外部神奇的常量、变量或类都不应该进入您的模型或控制器。即使你没有使用MVC模式,让你的类完全独立也是一个很好的实践,这样如果有什么东西坏了,你就不必去寻找它,它将是完全独立的。所以SITE_KEY,在我看来,这些会话变量应该在这个类中定义我猜他想加载现有用户,无论它是否处于活动状态,如果用户未处于活动状态,则让他了解情况。如果他只在用户处于活动状态时才选择该用户,他将不知道该用户是否处于活动状态或根本不存在……我明白你的意思。这仍然是一个容易质疑的问题。他甚至可以加入到一个“activeuser”表中,选择“null”或0条目,并使用该条目告诉用户“您处于活动状态”或“未处于活动状态”。我猜,通过
active
OP会想到
帐户是否处于活动状态,而不是用户是否处于活动状态(登录状态)…我对登录的部分感兴趣,你能改进一下吗,举例来说?@John,
loggedIn()
会在用户登录时返回true,否则返回false。。。我认为这是一个很好的方法,但“IsLoggedIn()”可能更合适comprehensible@umlcat我认为这是品味的问题。如果函数在if上下文中的作用是明确的,我很乐意放弃is。对我来说,
如果($user->loggedIn())
是清楚的,即使我听起来像个穴居人。