Php 使用会话保持用户登录

Php 使用会话保持用户登录,php,mysql,cookies,pdo,hash,Php,Mysql,Cookies,Pdo,Hash,我遇到了一个问题,试图找出如何通过点击“记住我”复选框来保持用户登录。选中“记住我”复选框并且用户成功登录后,我拥有的系统将用户id和哈希插入名为users\u session的数据库中 现在我遇到的问题是检查存储哈希的cookie是否与允许用户自动登录的哈希/用户id相同。下面的代码标记为登录代码,您可以看到我在哪里尝试检查哈希是否匹配,但它抛出了此错误致命错误:在中不在对象上下文中时使用$this,if($this->data()->password===Cookie::get($cooki

我遇到了一个问题,试图找出如何通过点击“记住我”复选框来保持用户登录。选中“记住我”复选框并且用户成功登录后,我拥有的系统将用户id和哈希插入名为
users\u session
的数据库中

现在我遇到的问题是检查存储哈希的cookie是否与允许用户自动登录的哈希/用户id相同。下面的代码标记为登录代码,您可以看到我在哪里尝试检查哈希是否匹配,但它抛出了此错误
致命错误:在
中不在对象上下文中时使用$this,
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>'; 
} 
} 
} 
}
if(Input::exists()){
if(Token::check(Input::get('Token')){
$validate=新的validate();
$validation=$validate->check($\u POST,数组(
'username'=>array('required'=>true),
'password'=>array('required'=>true)
)); 
如果($validation->passed()){
$user=新用户();
$cookieName=Config::get('memory/cookie_name');//已添加
如果(Cookie::存在($cookieName)){//已添加*********
如果($this->data()->password===Cookie::get($cookieName)){//已添加
echo$logged=''。“您已自动登录。”。';//已添加
}
否则{
echo$logged=“”。“您无法自动登录。”。”;**强文本**
Cookie::delete($cookieName);//已添加
}
} 
否则{
$memore=(输入::get('memore')=='on')?true:false;
$login=$user->login(输入::get('username')、输入::get('password')、$memory);
}
如果($login){
重定向::到('/account/home');
}否则{
echo$tryagain=“”。“您输入的信息与我们的记录不匹配。”;
} 
}否则{
foreach($validation->errors()作为$error){
回显$error,“
”; } } } }
形式


用户名
密码
记得我吗


您不能从类外部使用$this->data()。

那么我可以使用什么。哪个类包含data()方法?也许您正在寻找:$user->password而不是$this->data()->password?我的用户类。代码:
公共函数data(){return$this->\u data;}
这取决于user.Array或其他对象中的数据是什么?我的cookie类中没有数组,所以我假设是一个对象。
<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>