您好,我正在关注有关 php/mysql/PDO 的教程,名为:PHP OOP 登录/注册系统。
我认为 vid 是很久以前创建的,并且 php 代码中的内容发生了变化,现在我没有收到登录成功说明。
登录.php
<?php
require_once '../core/config/conf.php';
if(Input::exists()) {
if(Token::check(Input::get('token'))) {
$validate = new Validate();
$validation = $validate->check($_POST, array(
'gebruikersnaam' => array('required' => true),
'wachtwoord' => array('required' => true)
));
if($validate->passed()) {
$user = new User();
$login = $user->login(Input::get('gebruikersnaam'), Input::get('wachtwoord'));
if($login) {
echo (isset($user) && ($user->isLoggedIn())) ? 'Ingelogd!' : 'Inloggen ging fout.';
} else {
foreach ($validate->errors() as $error) {
echo $error, '<br />';
}
}
}
}
}
?>
<form action="" method="post">
<div class="field">
<label for="gebruikersnaam">Gebruikersnaam</label>
<input type="text" name="gebruikersnaam" id="gebruikersnaam" autocomplete="on">
</div>
<div class="field">
<label for="wachtwoord">Wachtwoord</label>
<input type="password" name="wachtwoord" id="wachtwoord" autocomplete="off">
</div>
<input type="hidden" name="token" value="<?php echo Token::generate(); ?>">
<input type="submit" value="Inloggen">
</form>
用户.class.php
<?php
class User {
private $_db,
$_data,
$_sessionName,
$_isLoggedIn = null;
public function __construct($user = null) {
$this->_db = DB::getInstance() ;
$this->_sessionName = Config::get('session/session_name');
if(!$user) {
if(Session::exists($this->_sessionName)) {
$user = Session::get($this->_sessionName);
if($user) {
($this->find($user)) ? $this->_isLoggedIn = true : $this->_isLoggedIn = false;
} else {
echo 'Class fout';
}
}
} else {
$this->find($user);
}
}
public function create($fields = array()) {
if(!$this->_db->insert('users', $fields)) {
throw new Exception('Ooops... daar ging iets fout.');
}
}
public function find($user = null) {
if($user) {
$field = (is_numeric($user)) ? 'id' : 'username';
$data = $this->_db->get('users', array($field, '=', $user));
if(($data) && ($data->count())) {
$this->_data = $data->first();
return true;
} else {
return false;
}
}
return false;
}
public function login($user = null, $pass = null) {
if(isset($user) && ($this->find($user))) {
if($this->data()->password === Hash::make($pass, $this->data()->salt)) {
Session::put($this->_sessionName, $this->data()->u_id);
return true;
}
}
return false;
}
public function data() {
return $this->_data;
}
public function isLoggedIn() {
return $this->_isLoggedIn;
}
}
这个方法是LoggedIn();即使我检查了login(),也没有返回true;和查找();方法,它们似乎按计划工作,但不知何故它并没有告诉我我已经登录。
谢谢。
最佳答案
您从未设置 _isloggedin 变量
public function login($user = null, $pass = null) {
if(isset($user) && ($this->find($user))) {
if($this->data()->password === Hash::make($pass, $this->data()->salt)) {
Session::put($this->_sessionName, $this->data()->u_id);
// set it here
$ this->_isloggedin = true;
return true;
}
}
return false;
}
关于php - 尝试让我的登录代码正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23376451/