php用户登录注销,PHP用户类(登录/注销/注册)

我认为你的主要想法是将用户处理(会话)与数据库查询分开,这在我看来是件好事。

但是,实际的实现情况并非如此,因为登录会将要发送到数据库的数据转义,即使该方法的其余部分与数据库无关。不要说你的数据库查询取决于全局资源的工作。当我在,我也建议你使用PDO。

此外,您的属性$ _email和$ _password是在私有范围内,但是要被受保护的方法访问。这可能会导致问题。属性和方法应具有等效的可见性。

现在,我可以看到您的UserService需要三件事:数据库处理程序,电子邮件和密码。把它放在构造函数中是有意义的。

以下是我将如何做:

class UserService

{

protected $_email; // using protected so they can be accessed

protected $_password; // and overidden if necessary

protected $_db; // stores the database handler

protected $_user; // stores the user data

public function __construct(PDO $db, $email, $password)

{

$this->_db = $db;

$this->_email = $email;

$this->_password = $password;

}

public function login()

{

$user = $this->_checkCredentials();

if ($user) {

$this->_user = $user; // store it so it can be accessed later

$_SESSION['user_id'] = $user['id'];

return $user['id'];

}

return false;

}

protected function _checkCredentials()

{

$stmt = $this->_db->prepare('SELECT * FROM users WHERE email=?');

$stmt->execute(array($this->email));

if ($stmt->rowCount() > 0) {

$user = $stmt->fetch(PDO::FETCH_ASSOC);

$submitted_pass = sha1($user['salt'] . $this->_password);

if ($submitted_pass == $user['password']) {

return $user;

}

}

return false;

}

public function getUser()

{

return $this->_user;

}

}

然后使用它:

$pdo = new PDO('mysql:dbname=mydb', 'myuser', 'mypass');

$userService = new UserService($pdo, $_POST['email'], $_POST['password']);

if ($user_id = $userService->login()) {

echo 'Logged it as user id: '.$user_id;

$userData = $userService->getUser();

// do stuff

} else {

echo 'Invalid login';

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值