Cookie没有被删除

时间:2017-12-04 07:19:14

标签: php cookies

:d

我的登录和注册脚本有问题。它记得我"功能,除非我退出,否则效果很好。它将该cookie存储在一个数据库中(以后再检查它),当我注销它时,它会从该数据库中删除(这是它应该工作的方式)然而问题是它并没有这样做。 t从浏览器中删除(即使我回来时它也没有从浏览器中删除,因为检查它已经注销了,前面提到过,db)

这是我的用户类(你可以看到一个注销方法(第85行)

<?php

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

    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{
                    //process logout
                }
            }
        } else{
            $this->find($user);
        }
    }

    public function create($fields = array()){
        if(!$this->_db->insert('users', $fields)){
            throw new Exception('There was a problem creating an 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 = false){
        if(!$username && !$password && $this->exists()){
            Session::put($this->_sessionName, $this->data()->id);
        } else{
            $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('users_session',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 exists(){
        return(!empty($this->_data)) ? true : false;
    }

    public function logout(){
        $this->_db->delete('users_session', array('user_id', '=', $this->data()->id));

        Session::delete($this->_sessionName);
        Cookie::delete(Config::get('remember/cookie_name'));
    }

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

    public function isLoggedIn(){
        return $this->_isLoggedIn;
        }
}

这是我的Cookie类(你可以在第19行看到删除cookie方法)

<?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() + $expiry, '/')){
            return true;
        }
        return false;
    }

    public static function delete($name){
        self::put($name, '', time() - 1);
    }
}

1 个答案:

答案 0 :(得分:0)

我认为你发错了作为setcookie的时间戳:

self :: put($ name,&#39;&#39;,time() - 1);

你应该这样打电话:

self :: put($ name,&#39;&#39;, - 1);

因为如果使用&#34; time()-1&#34;将来会产生一个时间戳:time()+ time()-1