Php 使用会话保持用户登录
我遇到了一个问题,试图找出如何通过点击“记住我”复选框来保持用户登录。选中“记住我”复选框并且用户成功登录后,我拥有的系统将用户id和哈希插入名为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
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>