|
|
|
|
LoginController.php (вызывается из фронтконтроллера)
<?php
class LoginController{
private $_params;
private $view;
public function run(){
#$User = new User();
if(!User::checkLogin()){
if(User::login($this->_params) == false){
$this->view->setTemplate('error.tpl')->setError("Вы не прошли авторизацию!");
} else {
$this->view->setMessage("Вы успешно авторизованы.")->setAuth(true);
}
}
}
public function setArgs($args){
$this->_params = $args;
}
public function setView($view){
$this->view = $view;
}
}
?>
|
User.php
<?php
class User{
private $id;
private $login;
private $name;
public static function login($array){
$db = DB::getPDO();
$login=mysql_escape_string($array['name']);
$password=mysql_escape_string($array['password']);
$dbPassw = $db->query("SELECT passw FROM users WHERE login = '$login'")->fetch();
if($dbPassw){
$dbPassw = $dbPassw[0];
$inPassw = $password;
if($inPassw == $dbPassw){
$userId = $db->query("SELECT id FROM users WHERE login = '$login'")->fetch();
$userId = $userId[0];
$uData = $db->query('SELECT * FROM users WHERE id ='.$userId)->fetch(PDO::FETCH_ASSOC);
$newHash = md5($uData['name'].time());
setcookie('hash', $newHash,0,"/");
$db->exec("UPDATE online SET hash = '$newHash' WHERE id = $userId");
return $uData;
} else
return false;
} else {
return false;
}
}
public static function checkLogin(){
if(isset($_COOKIE['hash']) && @!empty($_COOKIE['hash'])){
$cookieHash = mysql_escape_string($_COOKIE['hash']);
$db = DB::getPDO();
$userId = $db->query("SELECT id FROM online WHERE hash = '{$cookieHash}'")->fetch();
$userId = $userId[0];
if($userId=='')
return false;
$uData = $db->query('SELECT * FROM users WHERE id ='.$userId)->fetch(PDO::FETCH_ASSOC);
return $uData;
} else {
setcookie('hash','',0,"/");
return false;
}
}
public static function logout(){
setcookie('hash','',0,'/');
}
}
?>
|
Кука при авторизации не создается, хотя сама авторизация проходит успешно. Что не так? Предупреждаю: в ООП недавно :) | |
|
|
|
|
|
|
|
для: alexander95
(24.08.2012 в 22:35)
| | Cookie выставлена сессионная - т.е. она хранится в памяти браузера до момента его выключения, если нужна постоянная Cookie, нужно назначить в третьем параметре функции setcookie() какое-то время в будущем. | |
|
|
|
|
|
|
|
для: cheops
(25.08.2012 в 07:11)
| | Нет, она вовсе не пишется. То есть, я отправляю форму, User::login() возвращает успешный результат, но cookie не появляется! Удивительно. Работало раньше, когда я создавал отдельный экземпляр User и методы этого класса были не статичными. То есть, я вызывал их как $User->login();. В то же время, метод logout() оставался статичным и он тоже не мог удалить куку. То есть, Войти я мог, а выйти - нет.
Как так? | |
|
|
|
|
|
|
|
для: alexander95
(25.08.2012 в 11:18)
| | Это самописный фреймворк? | |
|
|
|
|
|
|
|
для: admiral
(26.08.2012 в 17:13)
| | Да, конечно. | |
|
|
|