PHP OOP登录系统stdClass :: $ id

时间:2014-12-16 17:31:43

标签: php

当我使用正确的信息登录时,我收到以下消息:

  

注意:未定义的属性:第37行的/var/www/classes/User.php中的stdClass :: $ id
  成功登录!
  User.php中的第37行是以下
  Session :: put($ this-> _sessionName,$ this-> data() - > id);

此外,在我登录并更新页面并转到/index.php以尝试打印会话后,我什么都没得到。 在index.php页面上执行以下命令

echo Session::get(Config::get('session/session_name'));

如果我没有登录并只是转到index.php,我会收到以下消息 注意:未定义的索引:第12行的/var/www/classes/Session.php中的用户

的login.php

<?php
require_once 'core/init.php';

ini_set('display_errors', 1);
error_reporting(~0);

if(Input::exists()) {
    if(Token::check(Input::get('token'))) {

        $validate = new Validate();
        $validation = $validate->check($_POST, array(
            'username' => array('required' => true),
            'password' => array('required' => true)
        ));

        if($validation->passed()) {
            $user = new User();
            $login = $user->login(Input::get('username'), Input::get('password'));

            if($login) {
                echo 'Success Login!';
            } else {
                echo 'Login failed';
            }
        } else {
            foreach($validation->errors() as $error) {
                echo $error;
            }
        }
    }
}

?>

<form action="" method="post">
    <div class="field">
        <label for="username">Username</label>
        <input type="text" name="username" id="username">
    </div>

    <div class="field">
        <label for="password">Password</label>
        <input type="password" name="password" id="password">
    </div>

    <input type="hidden" name="token" value="<?php echo Token::generate(); ?>">
    <input type="submit" value="Logga in">
</form>

session.php文件

<?php
class Session {
    public static function exists($name) {
        return (isset($_SESSION[$name])) ? true : false;
    }

    public static function put($name, $value) {
        return $_SESSION[$name] = $value;
    }

    public static function get($name) {
        return $_SESSION[$name];
    }

    public static function delete($name) {
        if(self::exists($name)) {
            unset($_SESSION[$name]);
        }
    }

    public static function flash($name, $string = '') {
        if(self::exists($name)) {
            $session = self::get($name);
            self::delete($name);
            return $session;
        } else {
            self::put($name, $string);
        }
    }
}

user.php的

<?php

class User {
    private $_db,
            $_data,
            $_sessionName;

    public function __construct($user = null) {
        $this->_db = DB::getInstance();
        $this->_sessionName = Config::get('session/session_name');
    }

    public function create($fields = array()) {
        if(!$this->_db->insert('users', $fields)) {
            throw new Exception('Could not create account');
        }
    }

    public function find($user = null) {
        if($user) {
            $field = (is_numeric($user)) ? 'id' : 'username';
            $data = $this->_db->get('users', array($field, '=', $user));

            if($data->count()) {
                $this->_data = $data->first();
                return true;
            }
        }
        return false;
    }

    public function login($username = null, $password = null) {
        $user = $this->find($username);

        if($user) {
            if($this->data()->password === Hash::make($password, $this->data()->salt)) {
                Session::put($this->_sessionName, $this->data()->id);
                return true;
            }
        }
        return false;
    }

    private function data() {
        return $this->_data;
    }


}

Token.php

<?php

class Token {
    public static function generate() {
        return Session::put(Config::get('session/token_name'), sha1(uniqid()));
    }

    public static function check($token) {
        $tokenName = Config::get('session/token_name');

        if(Session::exists($tokenName) && $token === Session::get($tokenName)) {
            Session::delete($tokenName);
            return true;
        }
        return false;
    }
}

0 个答案:

没有答案