セッション/Cookieの使用方法を知っています。ログインしているユーザーのセッションとCookie+トークンを保持します。
私はMVC構造(自分のもの)を使用していて、Login.phpコントローラーを持っています。インスタンスが1つしかないシングルトンクラスであるUser.phpクラスもあります。
私のベースコントローラーは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()メソッドは、そのユーザーのセッション/Cookieを設定するだけです
これで、ユーザーがログインしているかどうかを確認するためにアクセスするたびに、コントローラーを介してアクセスし、他の場所に渡す必要があります。
これを行うためのより良い方法はありますか?セキュリティの問題などの点で私のコードに問題はありますか...
どんな提案/アドバイスも歓迎されます、みんなありがとう