「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>
それでは何が使えますか? – Becky
どのクラスにdata()メソッドが含まれていますか? $ user->パスワード の代わりに $ this-> data() - >パスワード の代わりに を探していますか? – Greg
私のユーザークラス。コード: 'public function data(){ \t \t return $ this - > _ data; \t} ' – Becky