2016-10-12 7 views
-1

「Remember Me」チェックボックスをオンにしてユーザーをログインさせ続ける方法を見つけようとする際に問題が発生しています。 「Remember Me」チェックボックスをオンにしてユーザーが正常にログインすると、私はその場所に持っているシステムにusers_sessionというデータベースにユーザーのIDとハッシュを挿入します。セッションにログインしているユーザーを維持する

これで問題は解決しましたか?ハッシュを格納するハッシュ/ユーザーIDは、ユーザーが自動的にログインできるようになります。ログインコードとラベルされた以下のコードでは、ハッシュが一致するかどうかを確認しようとしましたが、この行にはこのエラーFatal error: Using $this when not in object context inがスローされています、if($this->data()->password === Cookie::get($cookieName)){

誰かが私が間違っていることを見て、私はユーザーがログインしたままになることができないのですか?ログインを作成し

session_start(); 

$GLOBALS['config'] = array(
    'mysql' => array(
     'host' => 'localhost', 
     'username' => '', 
     'password' => '', 
     'db' => '' 
    ), 
    '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'; 

    if(Cookie::exists(Config::get('remember/cookie_name')) && !Session::exists(Config::get('session/session_name'))) { 
     $hash = Cookie::get(Config::get('remember/cookie_name')); 
     $hashCheck = DB::getInstance()->get('users_session', array('hash', '=', $hash)); 

     if($hashCheck->count()) { 
      $user = new User($hashCheck->first()->user_id); 
      $user->login(); 
     } 
    } 

コード/保存、調理

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(); 
$cookieName = Config::get('remember/cookie_name'); //added 

if(Cookie::exists($cookieName)) { //added ********* 
if($this->data()->password === Cookie::get($cookieName)){ //added 
echo $logged = '<span class="signinpanel">' . "You've been automatically logged in." . '</span>'; //added 
} 
else { 
echo $logged = '<span class="signinpanel">' . "You could not be automatically logged in." . '</span>'; **strong text** 
Cookie::delete($cookieName); //added 
} 
} 
else { 

$remember = (Input::get('remember') === 'on') ? true : false; 
$login = $user->login(Input::get('username'), Input::get('password'), $remember); 

} 
if($login) { 
Redirect::to('/account/home'); 
} else { 
echo $tryagain = '<span class="signinpanel">' . "The information you entered did not match our records." . '</span>'; 
} 

} else { 
foreach($validation->errors() as $error) { 
echo $error, '<br>'; 
} 
} 
} 
} 

フォームが

<form name="Sign In" action="" method="POST" autocomplete="on" accept-charset= "utf-8"> 
     <div class="field"> 
      <label for="username">Username</label> 
      <input type="text" name="username" autocomplete="on" required> 
     </div> 
     <div class="field"> 
      <label for="password">Password</label> 
      <input type="password" name="password" autocomplete="off" required> 
     </div> 
     <div class="field"> 
      <label for="remember"> 
      <input type="checkbox" name="remember" id="remember"> Remember me 
      </label> 
     </div><br> 
     <input type="hidden" name="token" value="<?php echo Token::generate(); ?>"> 
     <input type="submit" value="Sign In"> 
    </form> 

答えて

-1

あなたは、クラスの外部からの$ this - >データを()を使用することはできません。

+0

それでは何が使えますか? – Becky

+0

どのクラスにdata()メソッドが含まれていますか? $ user->パスワード の代わりに $ this-> data() - >パスワード の代わりに を探していますか? – Greg

+0

私のユーザークラス。コード: 'public function data(){ \t \t return $ this - > _ data; \t} ' – Becky

関連する問題