我确实知道如何使用会话/cookie。我确实为登录的用户保留会话和 cookie + 令牌。
我正在使用 MVC 结构(我自己的)并且我有一个 Login.php 控制器。我也有 User.php 类,它是一个只有 1 个实例的单例类。
我的基本控制器获取 User 的实例并存储在如下变量中:
abstract class Controller {
private $model;
private $user;
function __construct($model = '') {
..... //some code
$this->user = User::getInstance();
}
public function user() {
return $this->user;
}
}
在我的 login.php 中,一旦用户使用用户名提交表单并通过,我就有以下内容:
function logUserIn() {
if (! isset($_POST['UName']) || ! isset($_POST['UPass'])) {
$this->_404();
}
$uname = strtolower($_POST['UName']);
$pass = Hash::strongHashMD5($_POST['UPass']);
$token = $_POST['token'];
$isValid = $this->model->userCheck($uname, $pass);
$res = $this->validateUser($isValid, $token, $uname);
if ($res === false) {
echo 'User Does Not Exist!';
} else if ($res === 'Token_Error') {
echo 'Invalid Form Submission';
} else if ($res === true) {
//update token
$this->model->updateToken($isValid['ID'], $token, $_SERVER['REMOTE_ADDR']);
header("Location: ../login");
}
exit;
}
这是我验证用户的方法
private function validateUser($UInfo, $token, $UName) {
if ($UInfo !== false && isset($UInfo['ID']) && $UInfo['ID'] > 0) {
if ($UInfo['token'] == $token) {
return 'Token_Error';
} else {
$this->user()->setValues($UInfo['ID'], $UName, $token);
$this->user()->setSessions();
return true;
}
}
return false;
}
setsessions() 方法只是设置该用户的会话/cookies
现在每次我想访问以查看用户是否登录时,我都必须通过控制器进行操作并将其传递给其他任何地方。
有没有更好的方法来做到这一点?我的代码在安全问题等方面是否有任何问题......
任何建议/建议将不胜感激,谢谢大家