ログインと登録スクリプトに問題があります。それは "私を覚えている"機能を持っており、私がログアウトしない限り素晴らしい作品です。そのクッキーをデータベースに保存します(後で確認してください)、ログアウトするとそのデータベースから削除されますが(これは動作するはずです)、問題はブラウザから削除されないということです(それは、私が戻ってきたときにブラウザから削除されていなくても、以前に言及した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);
}
}
は、あなたが常に設定されたCookie(時間で期限切れになることに注意してください)+ X、あなたがそれを "削除"した場合、あなたはdeleteメソッドを次のように変更します。setcookie($ name、 ""、time() - 3600);またはput関数を変更します(これは、すべての関数呼び出しを更新する必要があるため、よりうまくいく可能性があります)。 –
今私はこれを使用しています ' public static function delete($ name){ \t \t setcookie($ name、 ''、time() - 3600); \t} ' まだそれはブラウザからは削除されません:( – emma
@emmaクッキーを削除するには '/'パスにクッキーを設定しています ' setcookie($ name、 ''、time私はそれがうまくいくと信じています – devsourav