2017-12-04 10 views
0

:DCookieが削除されない

ログインと登録スクリプトに問題があります。それは "私を覚えている"機能を持っており、私がログアウトしない限り素晴らしい作品です。そのクッキーをデータベースに保存します(後で確認してください)、ログアウトするとそのデータベースから削除されますが(これは動作するはずです)、問題はブラウザから削除されないということです(それは、私が戻ってきたときにブラウザから削除されていなくても、以前に言及した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上の削除クッキー方法を見ることができます)

<?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); 
    } 
} 
+0

は、あなたが常に設定されたCookie(時間で期限切れになることに注意してください)+ X、あなたがそれを "削除"した場合、あなたはdeleteメソッドを次のように変更します。setcookie($ name、 ""、time() - 3600);またはput関数を変更します(これは、すべての関数呼び出しを更新する必要があるため、よりうまくいく可能性があります)。 –

+0

今私はこれを使用しています ' public static function delete($ name){ \t \t setcookie($ name、 ''、time() - 3600); \t} ' まだそれはブラウザからは削除されません:( – emma

+0

@emmaクッキーを削除するには '/'パスにクッキーを設定しています ' setcookie($ name、 ''、time私はそれがうまくいくと信じています – devsourav

答えて

0

私はあなたがいったんsetcookieにタイムスタンプとして間違って送信していると思う:

自己::置く($名、 ''、時間() - 1);

あなたはこのように呼び出すべきです:

self :: put($ name、 ''、 - 1);

ため使用であれば、「時間()-1」将来のタイム・スタンプを発生します。でも、時間()+時間()-1

関連する問題