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())
是清楚的,即使我听起来像个穴居人。