Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не пишется кука.
 
 автор: alexander95   (24.08.2012 в 22:35)   письмо автору
 
 


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,'/');
    }
}
?>


Кука при авторизации не создается, хотя сама авторизация проходит успешно. Что не так? Предупреждаю: в ООП недавно :)

  Ответить  
 
 автор: cheops   (25.08.2012 в 07:11)   письмо автору
 
   для: alexander95   (24.08.2012 в 22:35)
 

Cookie выставлена сессионная - т.е. она хранится в памяти браузера до момента его выключения, если нужна постоянная Cookie, нужно назначить в третьем параметре функции setcookie() какое-то время в будущем.

  Ответить  
 
 автор: alexander95   (25.08.2012 в 11:18)   письмо автору
 
   для: cheops   (25.08.2012 в 07:11)
 

Нет, она вовсе не пишется. То есть, я отправляю форму, User::login() возвращает успешный результат, но cookie не появляется! Удивительно. Работало раньше, когда я создавал отдельный экземпляр User и методы этого класса были не статичными. То есть, я вызывал их как $User->login();. В то же время, метод logout() оставался статичным и он тоже не мог удалить куку. То есть, Войти я мог, а выйти - нет.
Как так?

  Ответить  
 
 автор: admiral   (26.08.2012 в 17:13)   письмо автору
 
   для: alexander95   (25.08.2012 в 11:18)
 

Это самописный фреймворк?

  Ответить  
 
 автор: alexander95   (26.08.2012 в 18:22)   письмо автору
 
   для: admiral   (26.08.2012 в 17:13)
 

Да, конечно.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования