致命错误:找不到类“Cookie”


Fatal error: Class 'Cookie' not found

好吧,我仍在浏览这些教程,遇到了另一个错误,花了几个小时查看它,我看不出我又出错了。 基本登录无需选中复选框即可工作记住我,我已经查看了我的数据库结构和文件名/类型和路径,尝试var_dump,查看我的资源以获取任何指示,如果未找到cookie文件,一切都显示为空白。

用户.php

      <?php
        class User{
            private $_db,
                    $_data,
                    $_sessionName,
                    $_cookieName,
                    $_isLoggedIn;`enter code here`
            public function __construct($user = null){
                $this ->_db = DB::getInstance();
                $this->_sessionName = Config::get('session/session_name');
                $this->_cookieName = Config::get('remember/cookie_name');
            if(!$user){
                if(Session::exists($this->_sessionName)){
                    $user = Session::get($this->_sessionName);
                if($this->find($user)){
                    $this->_isLoggedIn = true;
                        }else{
                            //logout 
                        }
                    }
                } else{
                    $this->find($user);
                }
            }

            public function create($fields = array()){
                if(!$this->_db->insert('users', $fields)){
                    throw new Exception('There was a problem creating 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, $remember){
                    $user = $this->find($username);
                if($user){
                    if($this->data()->password ===Hash::make($password, $this->data()->salt)){
                        Session::put($this->_sessionName, $this->data()->id);
                        if($remember) {
                            $hash = Hash::unique();
                            $hashCheck = $this->_db->get('users_session', array('user_id', '=', $this->data()->id));
                            if(!$hashCheck->count()){
                                $this->_db->insert(array(
                                    'user_id' => $this->data()->id,
                                    'hash' => $hash                     
                                ));
                            } else {
                                $hash = $hashCheck ->first()->hash;
                            }
                            Cookie::put($this->_cookieName, $hash, Config::get('remember/cookie_expiry'));
                        }
                        return true;
                    }
                }       
                return false;
            }
            public function logout(){
                Session::delete($this->_sessionName);
            }
            public function data(){
                return $this->_data;
            }
            public function isLoggedIn(){
                return $this->_isLoggedIn;
            }
        }

初始化.php

<?php
    session_start();
    $GLOBALS['config'] = array(
        'mysql' => array(
            'host' => '127.0.0.1',
            'username' => 'root',
            'password' => '',
            'db' => 'oopdatabase'
        ),
        'remember' => array(
            'cookie_name' => 'hash',
            'cookie_expiry'=> 604800
        ),
        'session' => array(
            'session_name' => 'user',
            'token_name' => 'token'
        )
    );
spl_autoload_register(function($class){
    require_once 'classes/' . $class. '.php';
});
require_once 'functions/sanitize.php';

饼干.php

       <?
        class Cookie{
            public static function exists($name){
                return(isset($_COOKIE[$name])) ? true : false;
            }
            public static function get($name){
                return $_COOKIE[$name];
            }
            public static function put($name, $value, $expiry){
                if(setcookie($name, $value, time() + $exiry, '/')){
                    return true;
                }
            return false;   
            }
            public static function delete($name){
                //delete
                self::put($name, '', time() - 1);
            }
        }

登录.php

    <?php
require_once 'core/init.php';
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()){
            //log user in
            $user = new User();
            $remember = (Input::get('remember') === 'on') ? true : false;
            $login = $user->login(Input::get('username'), Input::get('password'), $remember );
            if($login){
                Redirect::to('index.php');
            }else{
                echo'<p>Sorry invalid details</p>';
            }
        } else{
            foreach($validation->errors() as $error)
                echo $error, '<br />';
        }
    }
}
?>
<form action="" method="POST">
    <div class="field">
        <label for="username" id="username"> Username </label>
        <input type="text" name="username" id="username" autocomplete="off">
    </div>
    <div class="field">
        <label for="password" id="password"> Password </label>
        <input type="password" name="password" id="password" autocomplete="off">
    </div>
    <div class="field">
        <label for="remember">
            <input type="checkbox" name="remember" id="remember"> Remember me
        </label>
    </div>
    <input type="hidden" name="token" value="<?php echo Token::generate();?>">
    <input type="submit" value="Login">
</form> 
<a href ="index.php">Home</a>

数据库.php

      <?php
        class DB{
            private static $_instance = null;
            private $_pdo, 
                    $_query, 
                    $_error = false,
                    $_results, 
                    $_count = 0;
                private function __construct(){
                    try{
                        $this->_pdo = new PDO('mysql:host=' . Config::get('mysql/host') . ';dbname='. Config::get('mysql/db'), Config::get('mysql/username'), Config::get('mysql/password'));
                    }catch(PDOException $e){
                        die($e->getMessage());
                    }
                }   
            public static function getInstance(){
                if(!isset(self::$_instance)){
                    self::$_instance = new DB();
                }
                return self::$_instance;
            }
            public function query($sql, $params = array()) {
                $this->_error = false;
                if($this->_query = $this->_pdo->prepare($sql)){
                $x = 1;
                    if(count($params)) {
                        foreach($params as $param) {
                            $this->_query->bindValue($x, $param);
                                $x++;
                        }
                    }
                if($this->_query->execute()){
                    $this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
                    $this->_count = $this->_query->rowCount();
                }   else{
                    $this->_error = true;   
                    }
                }
                return $this;
            }
            private function action($action, $table, $where = array()){
                if(count($where) === 3) {
                    $operators = array('=', '>', '<', '>=', '<=');
                        $field   = $where[0];
                        $operator = $where[1];
                        $value   = $where[2];
                    if(in_array($operator, $operators)){
                        $sql = "{$action}  FROM {$table} WHERE {$field} {$operator} ?";
                        if(!$this->query($sql, array($value))->error()){
                            return $this;
                        }
                    }   
                }
                return false;
            }
            public function get($table,$where){
                return $this->action('SELECT *', $table, $where);
            }
            public function delete($table, $where){
                return $this->action('DELETE', $table, $where);
            }
            public function insert($table, $fields = array()){
                if(count($fields)){
                    $keys = array_keys($fields);
                    $values = '';
                    $x= 1;
                    foreach($fields as $field){
                        $values .= '?';
                        if($x < count($fields)){
                            $values .= ', ';
                        }
                        $x++;
                    }
                    $sql = "INSERT INTO users (`" . implode('`, `', $keys) . "`) VALUES ({$values})";
                    if(!$this->query($sql, $fields)->error()){
                        return true;
                    }
                }
                return false;
            }
            public function error(){
                return $this->_error;
            }
                public function update($table, $id, $fields)
            {
                $set = '';
                $x   = 1;
                foreach($fields as $name => $value)
                {
                    $set .= "{$name} = ?";
                    if($x < count($fields))
                    {
                        $set .= ", ";
                    }
                    $x++;
                }
                $sql = "UPDATE {$table} SET {$set} WHERE id = {$id}";
                if(!$this->query($sql, $fields)->error())
                {
                    return true;
                }
                return false;
            }
            public function results(){
                return $this->_results; 
            }
            public function first(){
                return $this->_results[0];
            }
            public function count(){
                return $this->_count;
            }
        }   

get_include_path() 和 getcwd

    // Works as of PHP 4.3.0
    echo get_include_path();
    // Works in all PHP versions
    echo ini_get('include_path');
    // current directory
    echo getcwd() . "'n";
    chdir('classes');
    // current directory
    echo getcwd() . "'n";
returns errors:
    ;C:'php'pear.;C:'php'pearC:'Program Files (x86)'EasyPHP-DevServer-14.1VC11'data'localweb'my portable files'ooplogin C:'Program Files (x86)'EasyPHP-DevServer-14.1VC11'data'localweb'my portable files'ooplogin'classes 
    Warning: require_once(classes/Hash.php): failed to open stream: No such file or directory in C:'Program Files (x86)'EasyPHP-DevServer-14.1VC11'data'localweb'my portable files'ooplogin'core'init.php on line 23
    Fatal error: require_once(): Failed opening required 'classes/Hash.php' (include_path='.;C:'php'pear') in C:'Program Files (x86)'EasyPHP-DevServer-14.1VC11'data'localweb'my portable files'ooplogin'core'init.php on line 23

哈希.php

<?php
class Hash{
    public static function make($string, $salt =''){
        return hash('sha256', $string . $salt);
    }
    public static function salt($length){
        return mcrypt_create_iv($length);
    }
    public static function unique(){
        return self::make(uniqid());
    }
}

您是否在 Users 类中require_once cookie.php 文件?从您提供的代码来看,它不是必需的。需要 cookie.php在您的用户.php文件中。

我重新保存了文件,复制了 cookie.php 文件并覆盖了目录中的文件,无论出于何种原因它都可以工作。